QT:单元测试分段错误

发布于 2024-10-03 13:47:08 字数 760 浏览 7 评论 0原文

下面是用于模拟菜单上按键的代码块。我可以深入浏览应用程序的菜单,但是当我返回主窗体时,我遇到了分段错误....:(

首先我显示我的应用程序:

std::auto_ptr<MyForm> mainForm( new MyForm( 3, 3 ));
mainForm->show();

然后模拟按键以显示主菜单:

QTest::keyPress(mainForm.get(), Qt::Key_0, NULL, 300);
QTest::keyRelease(mainForm.get(), Qt::Key_0, NULL, 300);
QWidget *pWin = QApplication::activeWindow();
QCOMPARE(QString(pWin->objectName()), QString("MainMenu"));

然后模拟另一个按键返回到我的主应用程序:

QTest::keyPress(pWin, Qt::Key_Escape, NULL, 300);
QTest::keyRelease(pWin, Qt::Key_Escape, NULL, 300);
pWin = QApplication::activeWindow();
QCOMPARE(QString(pWin->objectName()), QString("MainForm"));

这就是我遇到分段错误的地方...有人能告诉我是什么导致了这个错误吗?

Below is a code block for simulating key presses on a menu. I can navigate deep into the menus of my application but when I get back to the main form, I'm getting a segmetation error.... :(

first I show my Application:

std::auto_ptr<MyForm> mainForm( new MyForm( 3, 3 ));
mainForm->show();

Then simulate a keyPress to show the main menu:

QTest::keyPress(mainForm.get(), Qt::Key_0, NULL, 300);
QTest::keyRelease(mainForm.get(), Qt::Key_0, NULL, 300);
QWidget *pWin = QApplication::activeWindow();
QCOMPARE(QString(pWin->objectName()), QString("MainMenu"));

Then simulate another keyPress to go back to my main application:

QTest::keyPress(pWin, Qt::Key_Escape, NULL, 300);
QTest::keyRelease(pWin, Qt::Key_Escape, NULL, 300);
pWin = QApplication::activeWindow();
QCOMPARE(QString(pWin->objectName()), QString("MainForm"));

This is where I'm getting the segmentation fault... Can anybody tell me what's causing this error?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

策马西风 2024-10-10 13:47:08

首先检查 QApplication::activeWindow() 的结果。从文档..

返回应用程序顶层
有键盘输入的窗口
焦点,如果没有应用程序窗口则为 0
有焦点。可能有一个
activeWindow() 即使没有
focusWidget(),例如如果没有
该窗口中的小部件接受密钥
事件。

Start with checking the result of QApplication::activeWindow(). From the docs..

Returns the application top-level
window that has the keyboard input
focus, or 0 if no application window
has the focus. There might be an
activeWindow() even if there is no
focusWidget(), for example if no
widget in that window accepts key
events.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文