我想在子线程中来控制主线程的UI控件,但是程序报错,所以我们可以利用信号和插槽来自己触发一个事件。
定义信号量
首先我们定义信号量
// qt型号量
signals:
// 连接失败的信号量
void closeSign();
要使用信号量就必须要有这个宏
信号量只需要定义,不需要我们去实现
定义插槽函数
// 这里我们定义了一个slots 插槽,这个用于UI界面与程序进行交互
private slots:
// 连接失败触发的事件(这个是触发事件)
void connectFail();
调用信号量会自动触发插槽函数,这个函数里面可以写一些操作线程的函数
绑定插槽函数和信号量
// connect函数,这个是自定义的信号和槽
// 第一个参数数发送方,这里一般是窗口对象,我们这里就是自己本身
// 第二个参数是信号量
// 第三个参数接收方
// 第四个参数是插槽函数
// 使用emit closeSign();来触发信号,然后自动调用connectFail()这个插槽函数
connect(this, SIGNAL(closeSign()), this, SLOT(connectFail()));
注意,如果是其他窗口触发信号量的话,那么我们就需要把第一个this改成(&其他窗口对象)
触发信号
// 发送连接失败的信号
emit closeSign();