1

次のようにコンテキストメニューがインストールされたQTreeViewクラスがあります。

m_ui.tree->setContextMenuPolicy(Qt::CustomContextMenu);
connect(m_ui.tree, SIGNAL(customContextMenuRequested(const QPoint&)),
        this, SLOT(ShowTreeContextMenu(const QPoint&)));
...
void ShowTreeContextMenu(const QPoint& point)
{
   m_treeContextMenu->exec(m_ui.tree->viewport()->mapToGlobal(point));
}

ただし、コンテキスト メニューが表示されている場合、 はQTreeViewマウス クリックに応答しなくなります。コンテキスト メニューが表示されているときに項目をクリックするとQTreeView、コンテキスト メニューが削除されますが、クリックした項目は選択されません。

これは、コンテキスト メニューが新しいアイテムの上にポップアップ表示されるため、新しいアイテムを右クリックすると特に混乱しますが、アイテムが選択されていないため、コンテキスト メニューの内容は以前に選択されたアイテムを参照しています。

4

3 に答える 3

2

私が確認していない可能な解決策は、右クリックのクリック イベントをキャプチャし、ツリー ビューで手動で選択してから、コンテキスト メニューをアクティブにする親クリック イベントを呼び出すことです。

于 2008-10-06T07:39:07.463 に答える
1

QTreeView をサブクラス化し、保護されたメソッド void contextMenuEvent(QContextMenuEvent *event); を追加します。このメソッドでは、QMenu を実行します。

class TreeView : public QTreeView{
  Q_OBJECT
public:
  TreeView(QWidget *parent);
  ~TreeView();
protected:
  void contextMenuEvent(QContextMenuEvent *event);
};

void TreeView::contextMenuEvent(QContextMenuEvent *event){
  QMenu menu(this);
  menu.addAction(action1);
  menu.addAction(action2);
  //...
  menu.addAction(actionN);
  menu.exec(event->globalPos());
}
于 2008-10-06T08:03:11.720 に答える
1

使用している Qt のバージョンはわかりませんが、Qt4.4.0 で同じ問題が見つかりました。4.3 で動作しました。これをバグ225615として Trolltech に報告しました。

これはまだ保留中としてマークされているので、当面は、右クリックをインターセプトして自分で選択するという Shy の提案に従います。

于 2008-10-06T08:08:39.337 に答える