[英]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.