سؤال

ولدي فئة 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 أثناء عرض قائمة السياق سيتم إزالة قائمة السياق ولكن لا تحديد العنصر النقر.

وهذا هو disorientating خصوصا عندما الحق النقر على عنصر جديد، وقائمة السياق للملوثات العضوية الثابتة على عنصر جديد، ولكن كما البند لم يتم تحديد محتويات قائمة السياق ويشير إلى العنصر المحدد سابقا.

هل كانت مفيدة؟

المحلول

وأنت لا تقول أي إصدار من كيو تي تستخدمه، لكننا وجدنا نفس المشكلة في Qt4.4.0، لأنها عملت في 4.3. أبلغنا هذا ترولتيك بوصفها علة 225615

وهذا لا يزال ضعت في انتظار، وذلك في غضون ذلك أود أن تتبع اقتراح خجول للاعتراض فوق الحق، وجعل اختيار نفسك.

نصائح أخرى

وأحد الحلول الممكنة التي أشرت لم يتم التحقق سيكون لالتقاط الحدث انقر فوق الزر الايمن، يدويا جعل الاختيار في طريقة عرض الشجرة ومن ثم استدعاء الحدث انقر فوق الأم مما يؤدي بدوره إلى تنشيط القائمة السياق.

وفئة فرعية QTreeView وإضافة أسلوب محمية 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());
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top