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

Cannot Access the Qt UI from an external cpp file

本文关键字:访问 Qt UI 文件 cpp 从外部      更新时间:2023-10-16

我正试图使一个程序成为一个。在这个程序中,我想按下一个按钮,处理另一个cpp文件中的一些文本,并附加我的QTextEdit。作为一个测试,我基本上只是设置我的按钮来运行另一个文件中的函数,以及程序启动时的函数。当它启动时,它会正确地打印到文本编辑和我的控制台,但当我按下按钮时,它只打印到控制台,而不是我的文本编辑。对于将文本附加到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

这是我的测试。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,而函数的其余部分却在运行?

您只能从主线程访问UI。你可以使用信号槽来做这件事。把你的位置写在主页上。从二等舱发射信号。连接构造函数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);

在要使用UI的cpp的头文件中,添加以下UI行。

##.h文件:

class A
{    
 Public:    
    Ui::MainWindow *ui;
}

##.cpp文件:

ui->label->setText(ui->button->text());