首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QTest不能将事件传递给子部件

QTest不能将事件传递给子部件
EN

Stack Overflow用户
提问于 2013-11-14 12:15:25
回答 2查看 1K关注 0票数 2

我正在用qtestlib编写一些自动测试代码.在下面的示例代码中:

代码语言:javascript
运行
复制
#include <QtTest/QtTest>

QWidget *win = new QWidget;
QLabel *label = new QLabel("&what");
QLineEdit *le = new QLineEdit;
label->setBuddy(le);

QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(label);
layout->addWidget(le);
win->setLayout(layout);
win->show();

QTestEventList events1, events2;
events1.addKeyClick(Qt::Key_W, Qt::AltModifier);
events1.addKeyClicks("hello");
events1.addDelay(1000);
events1.simulate(win); // didn't type 'hello'

events2.addKeyClicks("world");
events2.addDelay(1000);
events2.simulate(le); // did type 'world'

我不能让le通过向其父部件win发送事件来获得焦点并键入'hello‘。但我可以通过直接向le发送事件来做到这一点。

通常情况是,自定义QWidget类中有许多私有小部件成员。我无法通过将事件发送到实例来模拟键/鼠标事件。当然,我不能将事件发送到它的私有部件。那么,我能做什么来对这样的类执行一个自动测试呢?

环境: Gentoo Linux KDE Qt-4.8

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-14 12:42:39

现在肯定找到了解决办法:

代码语言:javascript
运行
复制
  QTest::keyClick(win, Qt::Key_F, Qt::AltModifier,500);
  QTest::keyClicks(win->focusWidget(),"blah");
  QTest::keyClick(win, Qt::Key_W, Qt::AltModifier,500);
  QTest::keyClicks(win->focusWidget(),"blah2");

最后一个参数是延迟,这是必要的(您应该测试它)。

票数 1
EN

Stack Overflow用户

发布于 2013-11-14 14:37:08

最好的方法是为测试小部件的子对象设置名称,然后用这个名称获取它们。

你也应该把注意力集中在这个编辑器上。有很多方法可以做到这一点。例如,通过调用nextInFocusChain,直到达到所需的编辑器和调用的setFocus(Qt::MouseFocusReason);

获取私有部件的其他方法是对子类和/或分叉构建进行测试,在那里您可以自由地访问私有部件(可以为此准备一些宏)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19977383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档