0

次のように作成されたコンテキスト メニューにサブメニューを追加します。

self.widget_alignment.setContextMenuPolicy(Qt.ActionsContextMenu)

widget_alignment はQTableWidgetです。

新しい QMenu インスタンスを作成しました:

exchange_bases_menu = QMenu(self.widget_alignment)

いくつかのアクションを追加し、メソッドQAction QMenu.addMenu (self, QMenu menu)を見つけました

しかし、self.widget_alignment のデフォルトのコンテキスト メニューへの参照は見当たりません。さらに、このコード:

self.widget_alignment.addMenu(exchange_bases_menu)

私に与えた: QTableWidget オブジェクトには属性 addMenu がありません。

サブメニューをデフォルトのコンテキスト メニューに追加するにはどうすればよいですか?

4

2 に答える 2

1

ドキュメントによると、QWidgetがアクション コンテキスト メニュー タイプを持つように設定されている場合、ウィジェットは、ウィジェットに設定されたアクションのリストに基づいてコンテキスト メニューを構築します。アクションのリストを変更するには、、、または をaddAction呼び出しinsertActionますremoveAction。したがって、次のようなことができると思います(C ++で):

QAction *act_p = new QAction( "Has Submenu", widget_alignment );
QMenu *submenu_p = new QMenu( act_p );
// Add items to the submenu
act_p->setMenu( submenu_p );
widget_alignment->addAction( act_p );

自分で試してみなくても、ウィジェット用に生成されたコンテキストメニューの下部に「サブメニューあり」オプションが追加され、サブメニューとして作成したサブメニューが表示されると思います。

于 2009-12-08T17:13:05.490 に答える
0

MouseReleaseEvent で QMenu の popup() を使用するのはどうですか?

if (pEvent->button() == Qt::RightButton)
{
    QMenu menu;
    menu.addAction(action1);
    menu.addAction(action2);
    menu.popup(pEvent->globalPos(),action1);
}
于 2009-12-08T16:55:06.823 に答える