我试图在该程序中创建一个程序我想按下一个按钮来处理另一个cpp文件中的某些文本并附加我的QTextEdit。我基本上作为测试只是设置我的按钮在另一个文件中运行一个函数,也在程序启动时。当它启动时,它正确打印到文本编辑以及我的控制台,但当我按下我的按钮时,它只打印到控制台而不是我的TextEdit。对于将文本附加到TextEdit并打印到控制台的函数,我将其设置为公共插槽,以便从其他文件中访问它。
这是我的quiz.cpp
#include <iostream>
#include "quiz.h"
#include "ui_quiz.h"
#include "test.h"
Quiz::Quiz(QWidget *parent) : QMainWindow(parent), ui(new Ui::Quiz) {
ui->setupUi(this);
setText();
}
Quiz::~Quiz() {
delete ui;
}
void Quiz::on_actionQuit_triggered() {
QCoreApplication::quit();
}
void Quiz::on_pushButton_clicked() {
run();
}
void Quiz::setText() {
ui->console->append("Hello");
std::cout << "Hello world!" << std::endl;
}
这是它的标题:
#ifndef QUIZ_H
#define QUIZ_H
#include <QMainWindow>
namespace Ui {
class Quiz;
}
class Quiz : public QMainWindow
{
Q_OBJECT
public:
explicit Quiz(QWidget *parent = 0);
~Quiz();
public slots:
void setText();
private slots:
void on_actionQuit_triggered();
void on_pushButton_clicked();
private:
Ui::Quiz *ui;
};
#endif // QUIZ_H
这是我的test.cpp:
#include "quiz.h"
#include "test.h"
#include "ui_quiz.h"
void run() {
Quiz* quiz = new Quiz();
quiz->setText();
}
及其标题:
#ifndef TEST_H
#define TEST_H
#endif // TEST_H
void run();
我做错了什么?为什么我不能访问ui但其余的函数运行?
答案 0 :(得分:0)
您只能从主线程访问UI。 你可以使用信号槽来做到这一点。 在main中写下你的插槽。并从二等发出你的信号。 在构造函数main中连接信号槽。
第二课.h文件:
void updateUI(QString str);
第二类.cpp文件:
emit updateUI("some text");
主类.h文件:
void updateUI(QString str);
主类.cpp文件(实现):
void Main::updateUI(QString str)
{
// change ui here
}
主类.cpp文件(在构造函数中):
connect(secondobj, &secondclass::updateUI, this, &mainclass::updateUI);