[英]Qt Slots and Signals Syntax
我搜索了许多帮助讨论并阅读了多个教程,但是我仍然不了解Qt信号和插槽的正确语法,使用Qt Core 5.0我创建了一个非常简单的程序,其中包含两个对象以尝试理解此语法。 (如下所示)。 每次编译此代码时,都会出现以下错误:
预期在“ int”之前的主要表达式
请为我提供以下答案:
我编写的代码有什么问题?
Qt connect函数是否期望对象引用(&mySig)的指针而不是对象的指针?
当我在连接功能中使用包含参数的插槽和信号时,是否需要为这些参数提供变量,或者仅声明数据类型,如下面的代码所示?
最终,我想使用插槽和信号在我正在编写的程序中的对象之间传递数据。 插槽和信号是否允许我传递从QObject派生的其他对象? 还是我需要做些额外的事情?
我看到许多对使用的connect语句格式的引用
QObject :: contect(&mySig,SIGNAL(sig_1(int)),&mySlot,SLOT(slot1(int)));
这种格式在Qt 5.0 Core下仍然有效吗?
非常感谢您的所有帮助! 简单程序的代码如下。
#include <QCoreApplication>
#include <QObject>
#include <iostream>
using namespace std;
//================================================================================
class testSig : public QObject
{
Q_OBJECT
public:
explicit testSig(QObject *parent = 0) :
QObject(parent)
{
}
void getNum()
{
int t;
cout << endl << endl << "Please Enter Number: ";
cin >> t;
emit sig_1(t);
}
signals:
void sig_1(int i );
};
//================================================================================
class testSlot : public QObject
{
Q_OBJECT
public:
explicit testSlot(QObject *parent = 0) :
QObject(parent)
{
}
public slots:
void slot1(int i)
{
cout << "New Value is: " << i << endl;
}
};
//=================================================================================
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
testSig mySig;
testSlot mySlot;
QObject::connect(&mySig, testSig::sig_1(int), &mySlot, testSlot::slot1(int));
for( ; ; )
{
mySig.getNum();
}
return a.exec();
}
1.我编写的代码有什么问题?
这行:
QObject::connect(&mySig, testSig::sig_1(int), &mySlot, testSlot::slot1(int));
这是非法的C ++。 如果要使用新的信号/插槽语法,则需要使用信号和插槽功能的指针:
QObject::connect(&mySig, &testSig::sig_1, &mySlot, &testSlot::slot1);
2. Qt connect函数是否期望对象引用(&mySig)的指针而不是对象的指针?
是的, 请参阅文档 。
3.当我在连接功能中使用包含参数的插槽和信号时,是否需要为这些参数提供变量,或者仅声明数据类型,如下面的代码所示?
使用“旧”语法,是的。 使用新语法时,请使用no(请参见上文:未指定任何参数)。 但是,如果您的信号或插槽过载,您可能会遇到麻烦 。
4.最终,我想使用插槽和信号在我正在编写的程序中的对象之间传递数据。 插槽和信号是否允许我传递从QObject派生的其他对象? 还是我需要做些额外的事情?
当然,您可以传递任何数据类型。 如果您使用排队连接,则存在限制,但我们将其保留为高级主题。
5.我看到了很多关于connect语句格式的引用,该语句使用
QObject::contect(&mySig, SIGNAL(sig_1(int)), &mySlot, SLOT(slot1(int)));
这种格式在Qt 5.0 Core下仍然有效吗?
是的,一点没错。 我们确实希望编译旧代码!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.