سؤال

لقد كتبت سليل QtreeView مع أعمدة متعددة. أرغب في إنشاء قائمة منبثقة تظهر في النقر بزر الماوس الأيمن فوق المستخدم فوق رؤوس الأعمدة. لقد حاولت اصطياد الإشارات من QtreeView لهذا ، ولكن يبدو أن QtreeView لا تنبعث منها إشارات على الرؤوس. qtreeview.header () يفعل. لذلك أعتقد أنني يجب أن: أيضًا:
1: قم بتوصيل إحدى إشارات QHeaderview بوظيفة منبثقة - لم أتمكن من العثور على إشارة يتم تشغيلها على نقرة واحدة يمينًا - لقد جربت المقطع المقطوع ، sectionhandledoubleclickleclickleclicked ، sectiondoubleclicked ، sectionpress نقرة واحدة يمينًا - لكنهم يمسكون بنقرة مزدوجة يمين)

self.header().sectionClicked.connect(self.headerMenu)
self.header().sectionHandleDoubleClicked.connect(self.headerMenu)
self.header().sectionDoubleClicked.connect(self.headerMenu)
self.header().sectionPressed.connect(self.headerMenu)

أو،
2: اكتب سليل QHeaderview مع وظيفة mousepressevent الخاصة بي ، واستخدم ذلك لرواعي. لقد لم تنجح حتى الآن في توصيل فئة الرأس الجديدة بسليل QtreeView. ما زلت أحصل على خطأ تجزئة في وقت التشغيل ، مع عدم وجود تفسير مزيد من التفسير.

#in DiceView's init, where DiceHeaders is the QHeaderView descendant
self.setHeader(DiceHeaders())

أيه أفكار؟

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

المحلول

لقد اكتشفت وظيفة setContextMenupolicy:

self.header().setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.header().customContextMenuRequested.connect(self.headerMenu)

ثم ، في Headermenu:

def headerMenu(self, pos):
    globalPos = self.mapToGlobal(pos)
    menu = QMenu()
    menu.addAction("test item")
    selectedItem = menu.exec_(globalPos)
    if selectedItem:
        print "selected: ", selectedItem

نصائح أخرى

سأذهب للحصول على الحل N ° 2: اكتب صفك الخاص ويرث QHeaderview. قد يأتي خطأ التجزئة الخاص بك من خلل Python/Pyqt؟ يجب عليك التأكد من وجود كائن DiceHeaders من خلال الحفاظ على الإشارة إليه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top