Проблемы с QTest::mouseClick на QListWidget

Я пытаюсь использовать QTest для тестирования. У меня есть QListWidget, на который я хотел бы щелкнуть, чтобы получить выбор. Но после щелчка ничего не выделяется. У кого-нибудь есть идеи?

Вот мой тестовый класс

void TestGui::List() {
    TestDialog dlg;
    dlg.show ();

    // Click on the centre of the second object
    QListWidget *list = dlg.ListWidget ();
    QListWidgetItem *item = list->item ( 1 );
    QRect rect = list->visualItemRect ( item );
    QTest::mouseClick ( list, Qt::LeftButton, 0, rect.center() );

    // Check if something was selected
    QCOMPARE ( list->currentRow (), 1 );
    QVERIFY ( list->currentItem () != NULL );
    QCOMPARE ( list->currentItem ()->text (), QString ( "Two" ) );
}

Ниже приведен класс тестирования

class TestGui: public QObject {
    Q_OBJECT

private slots:
    void List();
};

А вот класс TestDialog, используемый для отображения проблемы

class TestDialog : public QDialog {
    Q_OBJECT

public:
    TestDialog ( QWidget *parent = NULL )
    : QDialog ( parent, Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint ) {
        QVBoxLayout *layout = new QVBoxLayout ( this );

        m_list = new QListWidget ( this );
        m_list->addItem ( "One" );
        m_list->addItem ( "Two" );
        m_list->addItem ( "Three" );
        m_list->addItem ( "Four" );
        layout->addWidget ( m_list );

        QPushButton *close_button = new QPushButton( "Close" );
        connect ( close_button, SIGNAL ( clicked () ), this, SLOT ( close () ) );
        layout->addWidget ( close_button );

        setWindowTitle( "Test" );
    }

    QListWidget *ListWidget ( void ) {
        return m_list;
    };

private:
    QListWidget *m_list;

}; // TestDialog

person tim    schedule 23.05.2012    source источник


Ответы (1)


Еще немного подумав, оказывается, что щелкать нужно по виджету просмотра, а не по самому списку. Таким образом, строка должна выглядеть так

QTest::mouseClick (list->viewport(), Qt::LeftButton, 0, rect.center());

Спасибо

person tim    schedule 24.05.2012
comment
Великолепно! Это все еще работает в сентябре 2017 года (кстати, я использую PyQt5) - person sunyata; 24.09.2017
comment
Он также все еще работает в октябре 2017 года. Однако он не работает с двойным щелчком мыши... - person Mickaël C. Guimarães; 18.10.2017
comment
большое спасибо за это! Я изо всех сил пытался найти причину, почему это не сработало! - person Laurent Michel; 12.02.2019