一季度年 2013-10-11 02:10 采纳率: 0%
浏览 3458
已采纳

用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条回答 默认 最新

  • mevip 2013-11-25 08:02
    关注

    1、main方法里的receive_data虽然启动了,但并没有将它的信号和MainWindow中的槽函数关联;
    2、MainWindow构造函数中实例化了另一个线程 thread_1,并关联了信号和槽,但 thread_1并没有启动;

    根本原因:1和2中是同一类型的两个实例,是两个线程!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境