2

を使用して自動テストコードを書いていqtestlibます。以下のコード例では:

#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。しかし、イベントをle直接送信することでそれを行うことができます。

通常、カスタム QWidget クラスには多くのプライベート ウィジェット メンバーが存在します。また、イベントをインスタンスに送信してキー/マウス イベントをシミュレートすることはできません。また、プライベート ウィジェットにイベントを送信することもできません。では、そのようなクラスに対して自動テストを実行するにはどうすればよいでしょうか?

環境: Gentoo Linux KDE Qt-4.8

4

2 に答える 2

1

最良の方法は、テストされたウィジェットのサブオブジェクトの名前を設定し、この名前でそれらをフェッチすることです。

また、このエディターに焦点を当てるようにしてください。それを行うには多くの方法があります。たとえば、nextInFocusChain目的のエディターに到達するまで呼び出し、呼び出しsetFocus(Qt::MouseFocusReason);

プライベート パーツを取得する他の方法は、プライベート パーツに自由にアクセスできるテスト用のサブクラス化および/またはフォーク ビルドです (そのためのマクロをいくつか用意することは可能です)。

于 2013-11-14T14:37:08.437 に答える
1

確かに解決策が見つかりました:

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

ここに画像の説明を入力

最後のパラメーターは delay であり、必要です (テストする必要があります)。

于 2013-11-14T12:42:39.187 に答える