2010-05-10 86 views
2

我有一個簡單的QT應用程序,包含10個單選按鈕,名稱爲radio_1到radio_10。這是一個被稱爲選擇的用戶界面,以及一個叫做TimeSelectorQT NOOB:爲同一類型的多個對象添加動作處理程序

在我的頭文件中查找該設計類的一部分,我有這個:

//! [1] 
class TimeSelector : public QWidget 
{ 
    Q_OBJECT 

public: 
    TimeSelector(QWidget *parent = 0); 

private slots: 
    //void on_inputSpinBox1_valueChanged(int value); 
    //void on_inputSpinBox2_valueChanged(int value); 

private: 
    Ui::Selector ui; 
}; 
//! [1] 

註釋掉void_on_inputSpinBox1_valueChanged(int值)是從教程爲簡單的計算器。我知道我可以這樣做:

void on_radio_1_valueChanged(int value); 

但我需要10個功能。我希望能夠創建一個適用於所有事情的函數,並讓我傳入可能的單選按鈕的名稱,或者單選按鈕的引用,以便我可以使用它並確定它是誰。

我對QT很新,但這似乎應該是非常基本和可行的,謝謝。

+0

請注意'QSpinBox'和'QRadioButton'沒有相同的信號和方法。最值得注意的是,'QRadioButton'上沒有'valueChanged(int)'信號,但是'QRadioButton'檢查狀態改變時會發出'切換(bool)'信號。 – Lohrun 2010-05-10 08:52:36

回答

0

你可以做的是創建你自己的繼承自QRadioButton的單選按鈕類並創建一個信號。這個信號可以有你想要的所有參數。

void CheckWithReference(YourRadioButtonClass* rb); 

void CheckWithReference(QString RadioButtonName); 

或任何你想擁有。

然後在您的TimeSelector類中創建一個插槽,並使用相同的一組參數連接到所有信號。

+0

雖然這種方法可行,但我並不推薦Qt初學者。 – Lohrun 2010-05-10 08:55:05

4

您可以創建一個獨特的插槽並獲取用QObject::sender()方法發出信號的對象。下面的代碼提供這種插槽的一個例子:

public slots: 
    void onRadioToggled(bool checked) 
    { 
    QRadioButton *radio = qobject_cast< QRadioButton* >(QObject::sender()); 
    // radio is the object that emitted the triggered signal 
    // if the slot hasn't been triggered by a QRadioButton, radio would be NULL 
    if (radio) { 
     qDebug() << radio->objectName() << " is set to " << checked << "."; 
    } 
    } 

注意radio->objectName()不會給你一個好的結果,除非你把它定義明確的地方。

現在,您可以將每個QRadioButtontoggled(bool checked)信號連接到onRadioToggled插槽。請注意,QRadioButton沒有任何valueChanged信號,因此您的代碼實際上無法工作。

connect(radio_1, SIGNAL(toggled(bool)), SLOT(onRadioToggled(bool))); 
connect(radio_2, SIGNAL(toggled(bool)), SLOT(onRadioToggled(bool))); 
... 
connect(radio_10, SIGNAL(toggled(bool)), SLOT(onRadioToggled(bool))); 
+0

我想出了設計師,你可以選擇按鈕,右鍵單擊並將它們分配給一個按鈕組。但IMO的方法更好,因爲它也可以應用於其他控件,例如滑塊和編輯框。 – dashesy 2012-02-16 19:45:17

1

在單選按鈕的情況下,將按鈕添加到QButtonGroup。 類似的功能提供了QSignalMapper。