2016-07-12 35 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