程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> qt-用QT寫了一個0槽和信號相關的代碼,代碼編譯成功,但是槽函數始終接收不到信號,

qt-用QT寫了一個0槽和信號相關的代碼,代碼編譯成功,但是槽函數始終接收不到信號,

編輯:編程綜合問答
用QT寫了一個0槽和信號相關的代碼,代碼編譯成功,但是槽函數始終接收不到信號,

先看main.cpp文件: 就是定義一個線程

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

/*定義一個線程,並且啟動一個線程*/
MyThread receive_data;
receive_data.start();

return a.exec();

}

然後在mainwindow.h 文件中,定義了該線程的類,同時在mainwindow類中定義了一個槽函數,在mythread中定義了一個信號
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();

protected:
void changeEvent(QEvent *e);

private:
Ui::MainWindow *ui;

public slots:

void print();             //我的槽函數

private slots:
void on_pushButton_clicked();
};

/*創建一個線程類*/
class MyThread : public QThread
{
Q_OBJECT
public:
virtual void run();
signals:
void UpdateSignal(); //我定義的類

};

然後再mainwindow.h中實現了槽函數,並在線程中循環發送信號:

/*一個線程的主函數*/
void MyThread::run()
{
while(1)
{
//開啟一個死循環,每隔一秒就發送一個信號
qDebug("hello");
Sleep(1000);
emit UpdateSignal();
}
}

void MainWindow::print()
{
ui->label->setText("hello"); //槽函數的實現,就是不執行
}

結果:編譯也沒有問題,但是槽函數就是不執行,到底是什麼原因?
對了,在mainwindow的構造函數中,進行了連接
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
MyThread thread_1;
connect(&thread_1, SIGNAL(UpdateSignal()),
this, SLOT(print()));
}

這是我全部的代碼,就是不行

最佳回答:


1、main方法裡的receive_data雖然啟動了,但並沒有將它的信號和MainWindow中的槽函數關聯;
2、MainWindow構造函數中實例化了另一個線程 thread_1,並關聯了信號和槽,但 thread_1並沒有啟動;

根本原因:1和2中是同一類型的兩個實例,是兩個線程!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved