簡體   English   中英

無法使QSignalMapper正常工作

[英]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是什么。 但是,假設它是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宏時,此方法才有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM