qt - mouseclick/keyclick 不适用于 QTest 框架中 treeview 内的委托(delegate)小部件

标签 qt qtestlib

我使用 itemdelegate 为 TreeView 中的一列创建组合框。

因此在编辑单元格时,按 UP/Down 可以更改值。

enter image description here

但似乎我无法使用 qtest 框架模拟以下操作

QTest::keyClick(treeview_->focusWidget(), Qt::Key_Down);
QTest::keyClick(treeview_->focusWidget(), Qt::Key_Down);
QTest::keyClick(treeview_->focusWidget(), Qt::Key_Enter);

//after these code. the value of the cell should be 3.03.

上面的这些代码适用于普通的 qt 应用程序。

但它在 qtest 框架中不起作用

如果我尝试使用 qtest 框架对其进行测试,则单元格的值始终为 1.01
class MyTest: public QObject
{
    Q_OBJECT
public:
    ...
    void tst_combo_column();
    ...
private:
};  

void MyTest::tst_combo_column()
{
    ...
    treeview_->setCurrentIndex(idx_combo);
    treeview_->edit(idx_combo);
    QTest::keyClick(treeview_->focusWidget(), Qt::Key_Down);
    QTest::keyClick(treeview_->focusWidget(), Qt::Key_Down);
    QTest::keyClick(treeview_->focusWidget(), Qt::Key_Enter);
    QVERIFY(GET_COL_VALUE("options") == "3.03"); //can not pass
} 

我也试过鼠标点击,但遇到了同样的问题。

我的环境Qt5.5,ubuntu14.10

最佳答案

您可以使用 QApplication::focusWindow()作为 QTest::keyClick() 的目标调用。

例如,一个测试项目委托(delegate)的测试用例,该委托(delegate)返回带有自动完成功能的编辑器:

// application has a main window, where the main widget
// is a tree view
auto v = QApplication::focusWindow();
// go to a specific row
QTest::keyClick(v, Qt::Key_Down,  Qt::NoModifier, 10);
QTest::keyClick(v, Qt::Key_Down,  Qt::NoModifier, 10);
// start editing
QTest::keyClick(v, Qt::Key_F2,    Qt::NoModifier, 10);
// with nullptr, QTest does its own focus
// dependent window/widget selection
// the focusWindow() doesn't work here with keyClicks()
QTest::keyClicks(nullptr, "Rec",  Qt::NoModifier, 10);
// navigate the completion list popup
QTest::keyClick(v, Qt::Key_Down,  Qt::NoModifier, 10);
QTest::keyClick(v, Qt::Key_Down,  Qt::NoModifier, 10);
// select completion and finish editing
QTest::keyClick(v, Qt::Key_Enter, Qt::NoModifier, 10);
QTest::keyClick(v, Qt::Key_Enter, Qt::NoModifier, 10);
// verify that the change is stored in the model ...

关于qt - mouseclick/keyclick 不适用于 QTest 框架中 treeview 内的委托(delegate)小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31487030/

相关文章:

c++ - Qt中的访问控制

qt - PySide:如何在QTreeWidget的项目中设置SVG图标并更改图标的大小?

python - 将 QWebView 中的 Javascript 异常打印到控制台

qt - 部署 Qt ODBC 应用程序

javascript - 在 Windows 上静默安装 Qt55 Enterprise

c++ - 简单 qtest 失败并显示 'multiple definition of main'

c++ - 使用 QTestLib 编写单元测试

c++ - QSignalSpy 不能与线程一起使用

pyqt - qWait PySide 中的模拟?

c++ - Qt 测试 QVERIFY2() string 和 int 连接