2008-10-06 11 views
1

У меня есть QTreeView класса с контекстным меню установлена ​​следующим образом:Qt контекстное меню нарушая выбор в 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, пока отображается контекстное меню, удаляется контекстное меню, но не выбирается элемент с нажатием.

Это особенно дезориентирует при щелчке правой кнопкой мыши на новом элементе, поскольку контекстное меню появляется поверх нового элемента, но поскольку элемент не был выбран, содержимое контекстного меню относится к ранее выбранному элементу.

+0

Я думаю, что это исправлено в Qt 4.4.3. – Nick

ответ

1

Вы не сказать, какая версия Qt вы используете, но мы нашли ту же проблему в Qt4.4.0, он работал в 4.3. Мы сообщили об этом Trolltech в качестве ошибки 225615

Это все еще отмечено как ожидающее рассмотрения, поэтому я буду следовать предложению Шей перехватить правый щелчок и сделать выбор самостоятельно.

+0

Да, используя Qt 4.4. Спасибо – Niall

+0

Я думаю, что это исправлено сейчас. Я использую 4.4.3, и, похоже, все в порядке. – Nick

2

Возможное решение, которое я не проверил, - это захватить событие щелчка правой кнопкой мыши, вручную сделать выбор в древовидном представлении, а затем вызвать родительское событие клика, которое, в свою очередь, активирует контекстное меню.

1

Подкласс QTreeView и добавление защищенного метода void contextMenuEvent (событие QContextMenuEvent *); В этом методе вы выполняете 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()); 
} 
+0

попробовал этот метод, у него была такая же проблема – Niall

 Смежные вопросы

  • Нет связанных вопросов^_^