如何以编程方式单击QGroupBox的CheckBox

时间:2017-06-28 05:44:29

标签: python qt pyside pytest

我想在使用pytest-qt进行测试时以编程方式单击QGroupBox的builtin(启用)复选框。

但我无法通过属性或类似方法了解如何访问groupbox的基础复选框小部件。

基本上我可以在我的测试中使用.setChecked(True)方法,但这不是真正的"鼠标点击。

是否可以直接访问groupbox的复选框小部件?

1 个答案:

答案 0 :(得分:1)

点击操作涉及pressButton和releaseButton鼠标事件。因此,我们可以通过向目标小部件发送两个连续事件来模拟单击操作。

Widget::Widget(QWidget* parent)
    : QWidget(parent)
    , m_groupBox(new QGroupBox)
{
    m_groupBox->setCheckable(true);

    QPushButton* generateClickButton = new QPushButton("generate click");

    connect(generateClickButton, &QPushButton::clicked, [this]
    {
        clickAt(m_groupBox, Qt::LeftButton);
    });

    setLayout(new QVBoxLayout);
    layout()->addWidget(m_groupBox);
    layout()->addWidget(generateClickButton);

    resize(100, 100);
}

Widget::~Widget()
{}

void Widget::clickAt(QWidget* receiver, Qt::MouseButton button)
{
    if (receiver)
    {
        QMouseEvent pressEvent(QEvent::MouseButtonPress, receiver->pos(), button, 0, 0);
        QMouseEvent releaseEvent(QEvent::MouseButtonRelease, receiver->pos(), button, 0, 0);

        QApplication::sendEvent(receiver, &pressEvent);
        QApplication::sendEvent(receiver, &releaseEvent);
    }
}

更好的选择: QTest :: mouseClick做同样的事情