2016-07-12 33 views
0

我正在創建應在桌面和某些移動平臺上工作的應用程序。拖動單選按鈕執行操作但未設置檢查

以下示例在釋放信號上創建並將組中的縱向/橫向按鈕連接到插槽。

m_landscapeRadio = new QRadioButton(QObject::tr("Landscape ")); 
m_portraitRadio = new QRadioButton(QObject::tr("Portrait ")); 
m_orientationGroup.addButton(m_landscapeRadio, 0); 
m_orientationGroup.addButton(m_portraitRadio, 1); 
m_orientationGroup.setExclusive(true); 
m_landscapeRadio->setChecked(true); 
connect(&m_orientationGroup, SIGNAL(buttonReleased(int)), this, SLOT(orientationSlot(int))); 

但是我發現一個奇怪的情況:

假設景觀按鈕被選中。如果我按下並拖離肖像單選按鈕,則會執行插槽動作(對於肖像選項),但不勾選肖像按鈕。

我想不要執行該操作。

現在...

orientationSlot我測試參數和設定值檢查自己......雖然我真的很期待的按鈕知道這樣做自己。

但我認爲用戶更期望的是,如果按下按鈕並改變主意,能夠拖離按鈕而不執行動作。

回答

1

我可以處理驗證,如果檢查中真的發生了動作槽,並根據我認爲用戶體驗更好的方式來檢查或放棄該動作...

如果我想的按鈕進行檢查,並要執行的操作,以及:

void MyWidget::orientationSlot(int checked) 
{ 
    if(checked) m_portraitRadio->setChecked(true); 
    else  m_landscapeRadio->setChecked(true); 

    .... actual actions 
} 

如果我要行動不要當用戶從按鈕(我的首選選項)拖動離開來進行:

void MyWidget::orientationSlot(int checked) 
{ 
    if(m_orientationGroup.checkedId() != checked) return; 

    .... actual actions 
} 
0

我使用QRadioButton並處理鼠標按鈕被釋放事件,以便在單選按鈕被切換時對 作出反應。它拖動事件完全導致問題。我想要檢查按鈕 ,或者不執行操作。

http://doc.qt.io/qt-5/qradiobutton.html

每當一個按鈕被接通或關斷,它會發出切換() 信號。如果要觸發每個按鈕更改狀態的操作,請連接到此信號。使用isChecked()來查看是否選擇了一個特定的 按鈕。

要麼你的單選按鈕連接到明確的處理程序或整個集團:http://doc.qt.io/qt-5/qbuttongroup.html#buttonToggled

無效QButtonGroup :: buttonToggled(QAbstractButton *按鈕,布爾 選中)

這個信號被髮射當給定的按鈕被切換時。選中 如果按鈕被選中,則爲true;如果該按鈕未選中,則爲false。

注意:此類中的信號buttonToggled被重載。要連接到 這一個使用函數指針語法,你必須在靜態澆鑄指定 信號類型,如本例所示:

connect(buttonGroup, static_cast<void(QButtonGroup::*) 
     (QAbstractButton *, bool)>(&QButtonGroup::buttonToggled), 
    [=](QAbstractButton *button, bool checked) { 

    if (button == m_portraitRadio) { 
     // Portrait (un)checked 
     if (checked) 
     { 
     // checked! 
     } 
    } 
    /* ... */ }); 
+0

由於可以通過代碼設置按鈕,我避免了切換()信號。 – Thalia

+0

我已添加按鈕組示例。您需要以某種方式識別單個按鈕。也許使用text()方法。 – AlexanderVX

+0

謝謝 - 我只是想通了,我可以比較組與該按鈕發送的值,看看它是否確實檢查。如果沒有,我會放棄行動。它帶有很多按鈕的按鈕組變得很難看...... – Thalia