2012-05-23 21 views
4

我想用QTest做一些測試。我有一個QListWidget,我想單擊以獲得選擇。但點擊後,沒有選擇。有沒有人有任何想法?問題與QTest :: mouseClick 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(); 
}; 

這裏是用來顯示的問題

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

一些更多的思考後,TestDialog類,事實證明點擊需要位於視圖窗口小部件上,而不是列表本身。所以線應該看起來像這樣

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

謝謝

+0

太棒了!這仍然適用於2017年9月(我使用PyQt5 btw) – sunyata

+0

它也仍然在2017年工作。但是,它不適用於雙擊... –