我会做一个可视化的事件管理器,在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
插槽。