Как протестировать выпуск QTableView с помощью QTest?

Я хотел бы смоделировать издание ячейки QTableView с помощью QTest.

Я пробовал другой подход, но безуспешно:

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”);

Спасибо за вашу помощь.


person Alexis    schedule 08.05.2012    source источник
comment
Не уверен, что это единственная проблема, но вы печатаете Hello Word и сравниваете его с Hello World, который всегда терпит неудачу.   -  person Tim Meyer    schedule 26.09.2012


Ответы (1)


Я думаю, вам нужно обрабатывать события после отображения виджета. QListView, вероятно, ничего не будет делать, если он скрыт (как и должно быть!). Посмотрите, поможет ли qWaitForWindowShown(qtableview). Если это не сработает, запустите цикл событий напрямую, вызвав QCoreApplication::processEvents(). Посмотрите в qWaitForWindowShown, он, вероятно, все равно вращает цикл событий.

person Kuba hasn't forgotten Monica    schedule 08.05.2012