我想在以QPushButton
结尾的树视图中添加.pdf
,当我单击它时,我想返回为其指定索引的路径。
[Native QTreeView
甚至可能无法实现,但是如果有人可以引导我朝正确的方向前进,那就太棒了!
总结一下,我想在红色方块下方显示QPushButton
。
“树形视图”的当前代码:
from PyQt5.QtMultimediaWidgets import *
from PyQt5.QtMultimedia import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import *
import os, sys
class MainMenu(QWidget):
def __init__(self, parent = None):
super(MainMenu, self).__init__(parent)
self.model = QFileSystemModel()
self.model.setRootPath(QDir.rootPath())
self.model.setFilter(QDir.NoDotAndDotDot | QDir.AllEntries | QDir.Dirs | QDir.Files)
self.proxy_model = QSortFilterProxyModel(recursiveFilteringEnabled = True, filterRole = QFileSystemModel.FileNameRole)
self.proxy_model.setSourceModel(self.model)
self.model.setReadOnly(False)
self.model.setNameFilterDisables(False)
self.indexRoot = self.model.index(self.model.rootPath())
self.treeView = QTreeView(self)
self.treeView.setModel(self.proxy_model)
self.treeView.setRootIndex(self.indexRoot)
self.treeView.setAnimated(True)
self.treeView.setIndentation(20)
self.treeView.setSortingEnabled(True)
self.treeView.setDragEnabled(False)
self.treeView.setAcceptDrops(False)
self.treeView.setDropIndicatorShown(True)
self.treeView.setEditTriggers(QTreeView.NoEditTriggers)
for i in range(1, self.treeView.model().columnCount()):
self.treeView.header().hideSection(i)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = MainMenu()
main.show()
sys.exit(app.exec_())
为此,您可能需要一个项目委托。
想法是,您将基本项目绘画留给基类paint()
函数,然后在其上面绘制一个虚拟按钮。为此,对视图样式使用paint()
(从QStyleOptionButton
参数获得):创建一个样式选项,从视图中使用init(QStyleOptionButton
,它将应用基本矩形小部件,字体,调色板等),调整矩形以适合您的需求,最后对其进行绘制。
为了更好地实现绘图(鼠标悬停效果,也确保正确的绘画更新),您还需要将树视图的鼠标跟踪设置为True。除了代码中解释的其他检查之外,这还允许您绘制虚拟按钮,包括其悬停或按下状态。
最后,当释放按钮并且鼠标位于其边界内时,会以当前索引作为参数发出option
信号。
option.widget
buttonClicked