Qt Gui and Threads



我会做一个可视化的事件管理器,在MainWindow的listWidget中写入所有内容,但不工作。而且,如果ClassA启动一个线程,如何在listWidget中写入消息?我有这样的类:

MainWindow.cpp

#include "mainwindow.h"
#include "ui_MainWindow.h"
#include "classA.h"
MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow) {
    ui->setupUi(this);
    myClass= new classA();
}
QObject::connect(myClass, SIGNAL(makeSomething(QString)), this, SLOT(showMessageInConsole(QString)));
MainWindow::~MainWindow() {
    delete ui; 
}
void MainWindow::showMessageInConsole(QString msg) {
    ui->listWidget->addItem(msg);
}

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "classA.h"
namespace Ui {
    class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
public slots:
    void showMessageInConsole(QString msg);
private:
    Ui::MainWindow *ui;
    classA * myClass;
};
#endif

ClassA.cpp

ClassA::ClassA()
{
    // make something
    emit makeSomething("msg");
}
ServerThreaded::~ServerThreaded()
{
}

ClassA.h

#ifndef CLASSA_H
#define CLASSA_H
class ClassA: public QObject
{
    Q_OBJECT
public:
    ClassA(QWidget *parent);
    ~ClassA();

public slots:
signals:
    void makeSomething(QString msg);
private:
};
#endif

在将其连接到任何地方之前,您正在发射ClassA::makeSomething信号。将信号发射移到其他地方,例如插槽。

// classa.h
public slots:
    void emitMySignal();

// classa.cpp
void ClassA::emitMySignal()
{
    emit makeSomething("msg");
}

// mainwindow.h
signals:
    void requestMessage();

// mainwindow.cpp
QObject::connect(this, SIGNAL(requestMessage()), myCLass, SLOT(emitMySignal()));
...
emit requestMessage();

如果ClassA启动一个线程,如何在listWidget中写入消息?

通过使用信号和插槽。连接一个信号从你的工作对象,到你的ClassA类的信号,并连接信号从ClassA对象到你的MainWindow插槽。

相关内容

  • 没有找到相关文章

最新更新