私は周りを見回し、ツリーウィジェットだけでなく他のウィジェットに対しても問題が存在するようです。しかし、私の場合、私は解決策を見つけましたが、不完全な解決策でした。ツリーウィジェットにアクションを追加しています。そのため、右クリックすると、これらのアクションを含むポップアップが表示されます。しかし、ツリーウィジェットにアイテムを追加して右クリックすると、同じポップアップが表示されます。 ツリーウィジェットを右クリックすると、ツリーウィジェットのポップアップメニューが表示され、アイテムを右クリックすると、対応する別のポップアップメニューが表示されます。誰もこれを行う方法を知っていますか?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. コンソールアプリケーションの右クリックメニュー
- 2. NSStatusItem右クリックメニュー
- 3. Flexの右クリックメニューAIR
- 4. EXEファイルの右クリックメニュー
- 5. AvalonDockマウスの右クリックメニュー
- 6. PyQt QComboBoxの右クリックメニュー
- 7. 右クリックメニューのFlex 4 RichEditableText
- 8. winformsの下の右クリックメニュー
- 9. DataGridViewの右クリックメニュー/コピーの例?
- 10. Visual Studio 2008 - 右クリックメニューをカスタマイズする
- 11. Firefoxの右クリックメニューにオプションを追加
- 12. 右クリックメニューを追加する方法
- 13. Chrome拡張機能 - 動的右クリックメニュー
- 14. PyGTKを使用したPythonの右クリックメニュー
- 15. 右クリックメニューにスキャンオプションを追加する
- 16. 複数レベルのWindows右クリックメニューのカスタマイズ
- 17. アイテムに右クリックメニューを追加する
- 18. 右クリックメニューのボタンを削除オプション
- 19. Excel 2010セル内のカスタム右クリックメニュー
- 20. Eclipseの右クリックメニューの「ビルド」オプションがない
- 21. windowsXP上の右クリックメニュー:新しいファイルタイプ
- 22. クロムの右クリックメニューを無効にする
- 23. キーボードとマウスの両方を使用して右クリックメニュー
- 24. Eclipseエクスプローラのエクスプローラの右クリックメニューに項目を追加
- 25. リストビュー(Windowsフォーム、C#、ネット)の右クリックメニューからフォルダを削除する
- 26. Excelチャートの右クリックメニューに項目を追加
- 27. Eclipseプラグインの開発:右クリックメニューにオプションを追加する方法
- 28. VLC Media Playerの右クリックメニューを削除するには?
- 29. Chrome拡張機能の右クリックメニューにオプションを追加する
- 30. SWTツリーのツリーアイテムに右クリックメニューを追加する
私は頑張っているようです。だから実際には私のスロットにcustomContextMenuRequested信号を接続する必要がありますか? – ISTB
はい、その信号を捕まえた後にカスタムコンテキストメニューを表示するスロットが必要です。 – hank