如何使用QTest测试QTableView版本?

时间:2012-05-08 22:40:07

标签: c++ unit-testing qt qt4 qtestlib

我想用QTest来模拟QTableView单元格的版本。

我尝试了不同的方法,但没有取得任何成功:

qtableview->show(); 
/* I think that in my unit test I should no need 
that, could you confirm ? */

QModelIndex modelIndex = qtableview->model()->index(1,1); 
//I have tested that modelIndex is valid and that I retrieved expected data

/*First try: set the currentIndex on modelIndex 
thinking that keyClicks on qtableview will work 
on selected element of the tableview*/
qtableview->setCurrentIndex(modelIndex );
QTest::KeyClicks(qtableview,“Hello Word”);
QCOMPARE->index(1,1).data(), “Hello World”); // —> FAILED

/*Second approach
Get the cell widget*/
QWidget * qwidget = qtableview->indexWidget( modelIndex );
//—> No test since the qwidget is NULL… why ?

/*Third approach
Get the cell widget through the delegate*/
QWidget * qwidget = 
      qtableview->itemDelegate( modelIndex )->createEditor(qtableview,       
                                                           QStyleOptionViewItem(), 
                                                           modelIndex );
QTest::KeyClicks(qwidget ,“Hello Word”);
QCOMPARE->index(1,1).data(), “Hello World”); // —> FAILED

我还在三个方面添加了没有任何成功

QTest::mouseDClick(qtableview)
QTest::KeyClicks(qtableview,“Hello Word”);

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为您需要在显示小部件后处理事件。如果它被隐藏,QListView可能不会做任何事情(因为它应该!)。看看qWaitForWindowShown(qtableview)是否可以解决问题。如果这不起作用,请通过调用QCoreApplication :: processEvents()直接运行事件循环。看看qWaitForWindowShown,无论如何它可能会旋转一个事件循环。