1

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

また、3つのアプローチを追加しましたが、成功しませんでした

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

ご協力いただきありがとうございます。

4

1 に答える 1

0

ウィジェットが表示された後にイベントを処理する必要があると思います。QListViewは、非表示になっている場合はおそらく何もしません(そうする必要があります)。qWaitForWindowShown(qtableview)でうまくいくかどうかを確認してください。それでも問題が解決しない場合は、QCoreApplication :: processEvents()を呼び出してイベントループを直接実行します。qWaitForWindowShownを見てください、とにかくイベントループを回転させる可能性があります。

于 2012-05-08T22:59:34.983 に答える