Qt:实现子线程发送信号父线程切换图片

Posted gzk1171848896

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);");
}































































以上是关于Qt:实现子线程发送信号父线程切换图片的主要内容,如果未能解决你的问题,请参考以下文章

从主线程发送信号给子线程,子线程里的connect函数怎么个写法

EventBus事件通信框架 ( 发送事件 | 判断发布线程是否是主线程 | 子线程切换主线程 | 主线程切换子线程 )

桌面会飞的鸟Qt C++小项目

桌面会飞的鸟Qt C++小项目

桌面会飞的鸟Qt C++小项目

QT中UI主窗口如何与子线程相互传递参数