代码之家  ›  专栏  ›  技术社区  ›  JokerMartini

qtreeview控件左键单击与右键单击

  •  0
  • JokerMartini  · 技术社区  · 5 年前

    在我的qtreeview中,当用户单击列表中的项目时,我会在单击的treeview项目下弹出一个对话框。但是,我只希望在用户左键单击时发生这种情况。当前,当用户同时单击右键和左键时,将显示此弹出窗口。

    我希望在用户右键单击时显示上下文菜单,就像现在一样。以及仅当用户左键单击项目时显示的弹出对话框。右键单击应该仍然是正常的,选择和项。

    我该怎么解决?当我右键单击最右边的列时发生错误。

    enter image description here

    import os, sys, pprint
    from Qt import QtGui, QtWidgets, QtCore
    
    
    class Window(QtWidgets.QDialog):
        def __init__(self, parent=None):
            super(Window, self).__init__(parent)
            self.resize(800, 400)
    
            self.uiSearch = QtWidgets.QLineEdit()
            self.uiItems = QtWidgets.QTreeView()
            self.uiItems.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
            self.uiItems.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
            self.uiItems.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
            self.uiItems.setModel(QtGui.QStandardItemModel())
            self.uiItems.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
    
            self.layout = QtWidgets.QVBoxLayout()
            self.layout.addWidget(self.uiSearch)
            self.layout.addWidget(self.uiItems)
            self.setLayout(self.layout)
    
            for i in range(10):
                col1 = QtGui.QStandardItem('Item' + str(i))
                col2 = QtGui.QStandardItem('Item' + str(i))
                col3 = QtGui.QStandardItem('Item' + str(i))
                self.uiItems.model().appendRow([col1,col2,col3])
    
            self.uiItems.clicked.connect(self.clickedItem)
            self.uiItems.customContextMenuRequested.connect(self.openContextMenu)
    
            self.myMenu = QtWidgets.QMenu('Menu', self)
            self.myMenu.addAction(QtWidgets.QAction('Test',self))
    
    
        def clickedItem(self, index):
            if index.isValid():
                rect = self.uiItems.visualRect(index)
                pos = self.uiItems.viewport().mapToGlobal(rect.bottomLeft())
                # create editor
                dlg = QtWidgets.QDialog(self)
                dlg.setWindowFlags(QtCore.Qt.Popup)
                dlg.resize(rect.width(), 100)
                dlg.move(pos)
                dlg.show()
    
    
        def openContextMenu(self):
            self.myMenu.exec_(QtGui.QCursor.pos())
    
    
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        ex = Window()
        ex.show()
        app.exec_()
    
    0 回复  |  直到 5 年前