私は周りを見回し、ツリーウィジェットだけでなく他のウィジェットに対しても問題が存在するようです。しかし、私の場合、私は解決策を見つけましたが、不完全な解決策でした。ツリーウィジェットにアクションを追加しています。そのため、右クリックすると、これらのアクションを含むポップアップが表示されます。しかし、ツリーウィジェットにアイテムを追加して右クリックすると、同じポップアップが表示されます。 ツリーウィジェットを右クリックすると、ツリーウィジェットのポップアップメニューが表示され、アイテムを右クリックすると、対応する別のポップアップメニューが表示されます。誰もこれを行う方法を知っていますか?QTreeWidget右クリックメニュー
9
A
答えて
14
まずカスタムコンテキストメニューのポリシーを設定する必要があります。
treeView->setContextMenuPolicy(Qt::CustomContextMenu);
次にあなたがQWidget::customContextMenuRequested(const QPoint&)
信号に接続して、コンテキストメニューを表示することができます。
2
QAbstractItemModelのオーバーロードを見て、独自のOnContextMenuRequestedを提供してください。この機能を使用すると、異なる項目で異なるコンテキストメニューを作成できます。
void MyModel::OnContextMenuRequested(const QModelIndex& index, const QPoint& globalPos)
{
// find 'node' corresponding to 'index'
vector<pair<string,BaseNode*> > actions = node->GetActions(true);
if(actions.size()==0) return;
// the ptr list helps us delete the actions
boost::ptr_list<QObject> actionPtrList;
QList<QAction*> qtActions;
for(unsigned int i=0;i<actions.size();i++)
{
QAction* act = new QAction(actions[i].first.c_str(),NULL);
act->setData(qVariantFromValue(actions[i].second));
actionPtrList.push_back(act);
qtActions.append(act);
}
// create and show the context menu
QMenu *menu = new QMenu("Item actions",NULL);
actionPtrList.push_back(menu);
QAction* act = menu->exec(qtActions,globalPos);
if(act==NULL) return;
// act on the resulting action 'act'
}
+1
しかし、これがモデルにある理由はありません。それは、モデルが典型的には知らないはずのビューからの信号です。 –
14
まず、コンフィグQTreeWidget応答(発する信号)、マウスの右クリックに:
treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
セカンドここ
が役に立つかもしれ私のプロジェクトの1からいくつかの短縮擬似っぽいコードですあなたのスロット "MainWindow :: prepareMenu"と信号を接続してください:connect(treeWidget,&QTreeWidget::customContextMenuRequested,this,&MainWindow::prepareMenu);
第3に、コンテキストメニュースロット内:
void MainWindow::prepareMenu(const QPoint & pos)
{
QTreeWidget *tree = treeWid;
QTreeWidgetItem *nd = tree->itemAt(pos);
qDebug()<<pos<<nd->text(0);
QAction *newAct = new QAction(QIcon(":/Resource/warning32.ico"), tr("&New"), this);
newAct->setStatusTip(tr("new sth"));
connect(newAct, SIGNAL(triggered()), this, SLOT(newDev()));
QMenu menu(this);
menu.addAction(newAct);
QPoint pt(pos);
menu.exec(tree->mapToGlobal(pos));
}
関連する問題
- 1. NSStatusItem右クリックメニュー
- 2. コンソールアプリケーションの右クリックメニュー
- 3. svgの右クリックメニュー
- 4. Flexの右クリックメニューAIR
- 5. 不正な右クリックメニュー
- 6. ListViewの右クリックメニューUWP
- 7. EXEファイルの右クリックメニュー
- 8. PyQt QComboBoxの右クリックメニュー
- 9. AvalonDockマウスの右クリックメニュー
- 10. DataGridViewの右クリックメニュー/コピーの例?
- 11. Chromeの右クリックメニューのコンテキストメニュー
- 12. PyGtk3アクションでツリービューの右クリックメニュー
- 13. winformsの下の右クリックメニュー
- 14. 右クリックメニューのFlex 4 RichEditableText
- 15. PyGTKを使用したPythonの右クリックメニュー
- 16. クロムの右クリックメニューを無効にする
- 17. Eclipseの右クリックメニューの「ビルド」オプションがない
- 18. タブに右クリックメニューを追加する
- 19. Firefoxの右クリックメニューにオプションを追加
- 20. 複数レベルのWindows右クリックメニューのカスタマイズ
- 21. 右クリックメニューにスキャンオプションを追加する
- 22. 右クリックメニューのボタンを削除オプション
- 23. シェイプの右クリックメニューを無効にする
- 24. gridControl/gridView1(C#/ DevExpress)の右クリックメニューのカスタマイズプログラムで
- 25. JFreeChartの右クリックメニューを無効にする
- 26. VSコードの右クリックメニューの新規クラスC#
- 27. 右クリックメニューを追加する方法
- 28. windowsXP上の右クリックメニュー:新しいファイルタイプ
- 29. Visual Studio 2008 - 右クリックメニューをカスタマイズする
- 30. アイテムに右クリックメニューを追加する
私は頑張っているようです。だから実際には私のスロットにcustomContextMenuRequested信号を接続する必要がありますか? – ISTB
はい、その信号を捕まえた後にカスタムコンテキストメニューを表示するスロットが必要です。 – hank