كيو تي قائمة السياق كسر التحديد في QTreeView
-
05-07-2019 - |
سؤال
ولدي فئة 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());
}