[英]Can't get QSignalMapper to work
我正在使用C ++ Qt Framework制作應用程序。 我目前遇到的問題類似於提交表單。 我需要將客戶端添加到系統中。 因此,當您單擊“添加客戶端”按鈕時,它需要將QLineEdit中的文本和QDateEdit中的QDate提交給函數。
我研究的越多,似乎就越需要使用QSingalMapper,但我似乎根本無法使用它。
這是我首先嘗試使用的代碼片段。 我有一個帶有名稱和加入日期的客戶數據結構,需要提交。 但是,我也可以創建Client對象,並將其作為參數insead傳遞給它(如果有更好的主意)。
QObject::connect(addClientBtn, SIGNAL(clicked()), this, SLOT(addClient(clientName->text(), joiningDate->date())));
當我嘗試使用QSignalMapper時,它一直告訴我無法發送Client對象,因為它的類型不是QString,Widget *等。
有沒有一種更容易被我忽略的方法? 任何幫助將不勝感激。
如果我對您的理解正確,則不需要QSignalMapper
,但是由於您幾乎沒有張貼任何代碼,所以它很難告訴您。 特別是很難,因為我們不知道this
是什么。 但是,假設它是QDialog
或QMainWindow
,則必須執行以下操作:
在類定義.h中
...
protected slots:
void add_client();
...
在類實現.cpp中
mydialogormainwindow::mydialogormainwindow(){
QObject::connect(addClientBtn, SIGNAL(clicked()), this, SLOT(addClient()));
}
void mydialogormainwindow::add_client(){
QString name = clientName->text();
QDate date = joiningDate->date();
....
}
這是由於信號插槽連接。 信號發出一個信號,該信號包括已發送到插槽的參數。 單擊的信號沒有參數,因此無法將任何東西發送到插槽。 但是,由於插槽是在同一類中定義的,因此您可以直接在那里訪問數據。
注意:僅當您的類是派生的QObject
(對於QDialog
和QMainWindow
就是這種情況)並且在類定義中具有Q_OBJECT
宏時,此方法才有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.