1

以下は、メニューでのキー押下をシミュレートするためのコード ブロックです。アプリケーションのメニューを深くナビゲートできますが、メイン フォームに戻ると、セグメンテーション エラーが発生します.... :(

最初にアプリケーションを表示します。

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

次に、keyPress をシミュレートしてメイン メニューを表示します。

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

次に、別の keyPress をシミュレートして、メイン アプリケーションに戻ります。

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

ここでセグメンテーション違反が発生しています...このエラーの原因を誰か教えてもらえますか?

4

1 に答える 1

1

の結果を確認することから始めQApplication::activeWindow()ます。ドキュメントから..

キーボード入力フォーカスがあるアプリケーションの最上位ウィンドウを返します。フォーカスがあるアプリケーション ウィンドウがない場合は 0 を返します。focusWidget() がない場合でも、activeWindow() が存在する可能性があります。たとえば、そのウィンドウ内のウィジェットがキー イベントを受け入れない場合などです。

于 2010-11-22T14:00:52.897 に答える