从主线程发送信号给子线程,子线程里的connect函数怎么个写法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从主线程发送信号给子线程,子线程里的connect函数怎么个写法相关的知识,希望对你有一定的参考价值。
参考技术A 主线程发送消息给子线程,通常思维逻辑就是:其实很简单,在主线程中实例化一个Handler,然后让他与子线程相关联(只要它与子线程的Looper相关联即可),这样子它处理的消息就是该子线程中的消息队列,而处理的逻辑都是在该子线程中执行的,不会占用主线程的时间。那么我们就来实现一下,看看这样子到底行得通还是行不通。新建项目,修改它的MainActivity的代码本回答被提问者采纳Qt:实现子线程发送信号父线程切换图片
mainwindow.h中代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "mythread.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
MyThread* thread;
int count;
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mythread.h中代码
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread>
#include <QLabel>
class MyThread : public QThread
{
Q_OBJECT
public:
QLabel* label;
//覆盖QThread中的run()函数
void run()
{
sleep(5);
emit done();//发送自定义信号done
}
signals:
void done();//自己定义的信号
};
#endif // MYTHREAD_H
main.cpp(创建时自动生成)
#include <QtGui/QApplication>
#include "mainwindow.h"
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"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
thread = new MyThread;//创建对象
thread->label = ui->label;
count = 0;
connect(thread,SIGNAL(done()),this,SLOT(on_pushButton_clicked()));//信号捕获
thread->start();//子线程
}
MainWindow::~MainWindow()
{
delete ui;
delete thread;
}
void MainWindow::on_pushButton_clicked()
{
count++;//图片在label中显示
if(1 == count)
ui->label->setStyleSheet("image: url(:/new/prefix1/image/1.jpeg);");
if(2 == count)
ui->label->setStyleSheet("image: url(:/new/prefix1/image/2.jpeg);");
}
以上是关于从主线程发送信号给子线程,子线程里的connect函数怎么个写法的主要内容,如果未能解决你的问题,请参考以下文章