我会创建一个可视化事件管理器,将所有内容写入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
答案 0 :(得分:1)
在将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
如果ClassA启动一个线程,如何在listWidget中写一条消息?
使用信号和插槽。将来自工作人员对象的信号连接到ClassA
班级的信号,并将该信号从MainWindow
对象连接到{{1}}的插槽。