2012-05-23 4 views
4

Я пытаюсь использовать QTest для проведения некоторых тестов. У меня есть QListWidget, который я бы хотел щелкнуть, чтобы получить выбор. Но после щелчка ничего не выбрано. У кого-нибудь есть идеи?Проблемы с QTest :: mouseClick on 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 

ответ

5

После еще некоторые мысли , оказывается, что клик должен находиться в виджетах вида, а не в самом списке. Итак, строка должна выглядеть так:

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

Thanks

+0

Блестящий! Это все еще работает в сентябре 2017 года (я использую PyQt5 btw) – sunyata

+0

Он также по-прежнему работает в октябре 2017 года. Однако он не работает с двойными щелчками ... –