当前位置: 代码迷 >> QT开发 >> QT 的signal和slot
  详细解决方案

QT 的signal和slot

热度:73   发布时间:2016-04-25 03:13:17.0
QT 的signal和slot求助
本帖最后由 flight24 于 2014-07-01 12:29:00 编辑
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void newThread();
private:
    Ui::MainWindow *ui;
public slots:
    void a(int);
    void b();
};

#endif // MAINWINDOW_H

myThread.h

#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread>
#include <QApplication>
class myThread:public QThread
{

public:
    myThread();
protected:
    void run();
signals:
    void aaa(int);
    void bbb();

};

void myThread::run()
{
    while(true){
      emit aaa(1);
    }
}
myThread::myThread ()
{

}


#endif // MYTHREAD_H




main.cpp

#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}




mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "myThread.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    myThread* tmp = new myThread;
    QObject::connect(tmp,SIGNAL(aaa(int)),this,SLOT(a(int)));
    tmp->start();
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::a(int)
{
    ui->textBrowser->append("q");
}


这样写有什么错吗?实在不解啊。。编译都过不去
------解决方案--------------------
myThread类也要有Q_OBJECT,才能使用信号槽
------解决方案--------------------
自定义的线程类加上 Q_OBJECT
------解决方案--------------------
引用:
Quote: 引用:

你的自定义类里没有加上Q_OBJECT宏,

只有加上这个宏才可以使用qt的信号槽机制,
你试试


加了之后报这个错
mainwindow.obj:-1: error: LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl myThread::metaObject(void)const " (?metaObject@myThread@@UEBAPEBUQMetaObject@@XZ)

http://blog.csdn.net/yuzhiyuxia/article/details/7844595
  相关解决方案