无法从外部cpp文件访问Qt UI

时间:2016-05-08 05:50:25

标签: c++ qt qt-designer

我试图在该程序中创建一个程序我想按下一个按钮来处理另一个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但其余的函数运行?

1 个答案:

答案 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);
相关问题