2016-10-28 3 views
0

QTableWidget(resultTable)にポップアップメニューがあります。QtTestLibを使ってQActionにアクセスするには?

resultTable->setContextMenuPolicy(Qt::CustomContextMenu); 
connect(resultTable, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(popUpMenuResultTable(QPoint))); 

popUpMenuResultTable機能:

void MyClass::popUpMenuResultTable(QPoint pos) 
{ 
    QMenu menu; 
    QAction* actionExport = menu.addAction(QIcon(":/new/prefix1/FileIcon.png"), tr("Export")); 
    connect(actionExport, SIGNAL(triggered()), this, SLOT(exportResultsTable())); 
    menu.popup(pos); 
    menu.exec(QCursor::pos()); 
} 

は今、私はQtTestのlibを使用して、私のGUIをテストするための機能を実装する必要が私のクラスのコンストラクタで、私は、コンテキストメニューのポリシーを設定します。

結果テーブルを右クリックして、同じ結果をユーザーと同じように作成するにはどうすればよいですか?基本的にはactionExportQAction)にアクセスしてそれを起動する必要があります。例えば

QTest::mouseClick(resultTable, Qt::RightButton, Qt::NoModifier, pos, delay); 
を、それは QMenuは表示されません。

enter image description here

私はすでに試しました。

私はQt 5.3.2を使用しています。

+0

コンテキストメニューイベントをウィジェットに送信しようとしましたか? I. 'QContextMenuEvent'を作成し、' QCoreApplication :: sendEvent() 'または' QCoreApplication :: postEvent() 'で送信します。 –

+0

いいえ、私は試していません。どうすればいいのか簡単な例を教えてください。助けてくれてありがとう。 – KelvinS

答えて

1

多分あなたが何をしているのではないかもしれませんが、テストするのが簡単な別のアプローチです。代わりに、手動でウィジェットとアクションを登録しQt::ActionContextMenuを使用するメニューを作成する

// e.g. in the widget's constructor 
resultTable->setContextMenuPolicy(Qt::ActionsContextMenu); 

QAction* actionExport = menu.addAction(QIcon(":/new/prefix1/FileIcon.png"), tr("Export")); 
connect(actionExport, SIGNAL(triggered()), this, SLOT(exportResultsTable())); 
resultTable->addAction(actionExport); 

次にあなたがresultTable->actions()を返すか、単にactionExportあなたのクラスのメンバを作るあなたのウィジェットにアクセサを追加するのいずれか。 テストコードがアクションにアクセスできるようになると、単にそのトリガーを呼び出すことができますtrigger()メソッド。

関連する問題