2015-03-03 84 views
0

我正在使用C++ Qt框架開發應用程序。我目前遇到的問題與提交表單類似。我需要將一個客戶端添加到系統中。所以當你點擊「添加客戶端」按鈕時,它需要將來自QLateEdit和QDate的文本從QDateEdit提交給一個函數。QSignalMapper無法正常工作

我研究得越多,看起來我越需要使用QSingalMapper,但似乎無法讓它工作。

這是我第一次嘗試使用的代碼片段。我有一個客戶端數據結構,需要提交名稱和加入日期。但是,我也可以創建Client對象,並將其作爲參數insead傳遞,如果這是個更好的主意。

QObject::connect(addClientBtn, SIGNAL(clicked()), this, SLOT(addClient(clientName->text(), joiningDate->date()))); 

當我試圖用QSignalMapper,它不停地告訴我,我不能送,因爲它的類型的QString,部件*等

的不是客戶端對象是否有可能以更簡單的方法做這個我忽略了嗎?任何幫助將不勝感激。

+0

我不知道爲什麼你會在這種情況下使用信號映射器。只需將按鈕的「單擊」信號連接到某個插槽,您可以發出另一個信號,或直接調用所需的功能。 – thuga 2015-03-03 09:40:46

回答

2

如果我正確理解你的話,你不需要QSignalMapper,但是由於你幾乎沒有發佈任何代碼,所以很難說清楚。特別是這很難,因爲我們不知道什麼是this。但是,假設它是一個QDialogQMainWindow,你所要做的大意如下的內容:

類定義.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(這是QDialogQMainWindow的情況下),並在其類定義的Q_OBJECT宏。

+0

啊好吧,這實際上很有意義。 「this」引用了QMainWindow,我不太確定我是否可以在函數本身中訪問clientName和joiningDate,但我只是很傻。非常感謝你清理這個! – nickcorin 2015-03-03 09:42:50