如何自定义信号
1.使用signals声明
2.返回值是void
3.在需要发送的地方使用 emit 信号名字(参数); 进行发送
4.在需要链接的地方使用connect进行链4
接
signals:
void sig_addOne(int value);
connect(&dlg,&SetDialog::sig_addOne,[=](int value){
ui->lineEdit->setText(QString::number(value));
});
如何跨线程发送信号
因为QT的子线程无法直接修改ui,所以需要发送信号到ui线程进行修改
非基础类型参数注册
报错:QObject::connect: Cannot queue arguments of type 'Score'
(Make sure 'Score' is registered using qRegisterMetaType().)
struct Score{
string name;
int id;
int age;
};
ChildThread::ChildThread()
{
qRegisterMetaType<Score>("Score");
}
qRegisterMetaType<Score>("Score");
<Score>
:指定了要注册的类型。在这个例子中,Score
是一个自定义的C++类。"Score"
:这是一个字符串字面量,表示类型的名称。这个名称应该与你在代码中使用的类型名称相匹配,并且它用于Qt元对象系统的内部处理,比如类型检查和转换。
当使用Qt的信号和槽机制时,如果你尝试传递一个自定义类型(比如Score
)作为参数,Qt需要知道如何正确地处理这个类型。默认情况下,Qt的信号和槽机制只支持基本的C++类型和Qt内置的一些类型(比如QString
、QList<int>
等)。对于自定义类型,你需要通过qRegisterMetaType
函数来注册它们。