QStyledItemDelegate 绘制刷新问题

2024-01-15

我目前正在尝试研究模型视图方法并编写缩略图查看器应用程序。

在此示例中,我只是尝试绘制 20 个框,但我得到的似乎是随机选择,该选择会随着鼠标移动而更新。滚动使事情变得更糟,有时绘制的只有框等。而且文本似乎根本没有渲染。

对我来说,这看起来像是绘制方法的刷新/更新问题。 我在这里错过了什么吗?

最终我需要展示很多物品。所有这些都包含一些标签和一个需要在运行时更新的像素图。所以我认为画它们将是最快的解决方案。或者,我尝试使用 Paint 方法渲染我的小部件:

customWidget.render(painter, QtCore.QPoint(0,0), renderFlags=QtGui.QWidget.DrawChildren)

这似乎更慢,但至少有效。

这是一个最小的工作示例来说明我的问题:

import sys
from PySide import QtCore
from PySide import QtGui

elements = range(20)

class ElementListModel(QtCore.QAbstractListModel):
    def __init__(self, elements = [], parent = None):
        super(ElementListModel, self).__init__()
        self.__elements = elements

    def rowCount(self, parent):
        return len(self.__elements)

    def data(self, index, role):
        if role == QtCore.Qt.DisplayRole:
            return str(self.__elements[index.row()])

class ElementThumbDelegate(QtGui.QStyledItemDelegate):
    def __init__(self, view, parent=None):
        super(ElementThumbDelegate, self).__init__(parent)

    def paint(self, painter, options, index):

        width = options.rect.width()
        height = options.rect.height()

        painter.setRenderHint(QtGui.QPainter.Antialiasing)
        painter.setPen(QtGui.QColor(255, 255, 255))
        painter.setBrush(QtGui.QColor(10, 10, 10))
        painter.drawRect(0, 0, width, height)
        painter.drawText(options.rect, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter, str(index.data()))
        painter.translate(options.rect.topLeft())

    def sizeHint(self, options, index):
        return QtCore.QSize(50, 50)

def main():
    app = QtGui.QApplication(sys.argv)
    viewer = QtGui.QListView()

    viewModel = ElementListModel(elements)
    viewer.setModel(viewModel)
    viewer.setViewMode(QtGui.QListView.IconMode)
    viewer.setItemDelegate(ElementThumbDelegate(viewer))

    viewer.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

提前致谢。任何帮助或下一步该去哪里寻找的指示将不胜感激!


事实证明painter.translate()与在查看器原点 (0,0) 处绘制框相结合,会与自动定位发生冲突并导致问题。

委托到适当位置的转换由视图本身处理 - 无需手动执行。

工作代码:

import sys
from PySide import QtCore
from PySide import QtGui

elements = range(20)

class ElementListModel(QtCore.QAbstractListModel):
    def __init__(self, elements = [], parent = None):
        super(ElementListModel, self).__init__()
        self.__elements = elements

    def rowCount(self, parent):
        return len(self.__elements)

    def data(self, index, role):
        if role == QtCore.Qt.DisplayRole:
            return str(self.__elements[index.row()])

class ElementThumbDelegate(QtGui.QStyledItemDelegate):
    def __init__(self, view, parent=None):
        super(ElementThumbDelegate, self).__init__(parent)

    def paint(self, painter, options, index):
        painter.setRenderHint(QtGui.QPainter.Antialiasing)
        painter.setPen(QtGui.QColor(255, 255, 255))
        painter.setBrush(QtGui.QColor(10, 10, 10))
        painter.drawRect(options.rect)
        painter.drawText(options.rect, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter, str(index.data()))

    def sizeHint(self, options, index):
        return QtCore.QSize(50, 50)

def main():
    app = QtGui.QApplication(sys.argv)
    viewer = QtGui.QListView()

    viewModel = ElementListModel(elements)
    viewer.setModel(viewModel)
    viewer.setViewMode(QtGui.QListView.IconMode)
    viewer.setItemDelegate(ElementThumbDelegate(viewer))

    viewer.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QStyledItemDelegate 绘制刷新问题 的相关文章

  • Matplotlib 标准化颜色条 (Python)

    我正在尝试使用 matplotlib 当然还有 numpy 绘制轮廓图 它有效 它绘制了它应该绘制的内容 但不幸的是我无法设置颜色条范围 问题是我有很多图 并且需要所有图都具有相同的颜色条 相同的最小值和最大值 相同的颜色 我复制并粘贴了在
  • 如何屏蔽 PyTorch 权重参数中的权重?

    我正在尝试在 PyTorch 中屏蔽 强制为零 特定权重值 我试图掩盖的权重是这样定义的def init class LSTM MASK nn Module def init self options inp dim super LSTM
  • 替换字符串列表中的 \x00 的最佳方法?

    我有一个来自已解析 PE 文件的值列表 其中包括 x00每个部分末尾的空字节 我希望能够删除 x00字符串中的字节而不删除所有字节 x 文件中的 s 我试过做 replace and re sub 但并没有取得太大成功 使用Python 2
  • 如何用 python 和 sympy 解决多元不等式?

    我对使用 python 和 Sympy 还很陌生 并且遇到了使用 sympy 解决多元不等式的问题 假设我的文件中有很多函数 如下所示 cst sqrt x 2 cst exp sqrt cst x 1 4 log log sqrt cst
  • 获取单个方程的脚本

    在文本文件中输入 a 2 8 b 3 9 c 4 8 d 5 9 e a b f c d g 0 6 h 1 7 i e g j f h output i j 期望的输出 输出 2 8 3 9 0 6 4 8 5 9 1 7 如果输入文件名
  • 将 subprocess.Popen 的输出通过管道传输到文件

    我需要启动一些长时间运行的进程subprocess Popen 并希望拥有stdout and stderr从每个自动管道到单独的日志文件 每个进程将同时运行几分钟 我想要两个日志文件 stdout and stderr 每个进程当进程运行
  • VSCode pytest 测试发现失败

    Pytest 测试发现失败 用户界面指出 Test discovery error please check the configuration settings for the tests 输出窗口显示 Test Discovery fa
  • 唯一的图像哈希值即使 EXIF 信息更新也不会改变

    我正在寻找一种方法来为 python 和 php 中的图像创建唯一的哈希值 我考虑过对原始文件使用 md5 和 因为它们可以快速生成 但是当我更新 EXIF 信息 有时时区关闭 时 它会更改总和 并且哈希也会更改 有没有其他方法可以为这些文
  • Python:随时接受用户输入

    我正在创建一个可以做很多事情的单元 其中之一是计算机器的周期 虽然我将把它转移到梯形逻辑 CoDeSys 但我首先将我的想法放入 Python 中 我将进行计数 只需一个简单的操作 counter 1 print counter 跟踪我处于
  • 行为:如何从另一个文件导入步骤?

    我刚刚开始使用behave http pythonhosted org behave 一个Pythonic BDD框架 使用小黄瓜语法 http docs behat org guides 1 gherkin html 行为需要一个特征 例
  • 反加入熊猫

    我有两个表 我想附加它们 以便仅保留表 A 中的所有数据 并且仅在其键唯一时添加表 B 中的数据 键值在表 A 和 B 中是唯一的 但在某些情况下键将出现在表 A 和 B 中 我认为执行此操作的方法将涉及某种过滤联接 反联接 以获取表 B
  • 如何为多组精灵创建随机位置?

    我尝试使用 blit 和 draw 方法进行 for 循环 并为 PlayerSprite 和 Treegroup 使用不同的变量 for PlayerSprite in Treegroup surface blit PlayerSprit
  • 字典的嵌套列表

    我正在尝试创建dict通过嵌套list groups Group1 A B Group2 C D L y x 0 for y in x if y x 0 for x in groups d k v for d in L for k v in
  • 我可以使用 dask 创建 multivariate_normal 矩阵吗?

    有点相关这个帖子 https stackoverflow com questions 52337612 random multivariate normal on a dask array 我正在尝试复制multivariate norma
  • 字典中列表中仅有的几个索引的总和

    如果我有这种类型的字典 a dictionary dog white 3 5 black 6 7 Brown 23 1 cat gray 5 6 brown 4 9 bird blue 3 5 green 1 2 yellow 4 9 mo
  • Python int 太大,无法放入 SQLite

    我收到错误 OverflowError Python int 太大 无法转换为 SQLite INTEGER 来自以下代码块 该文件约25GB 因此必须分部分读取 length 6128765 Works on partitions of
  • 是否可以写一个负的python类型注释

    这可能听起来不合理 但现在我需要否定类型注释 我的意思是这样的 an int Not Iterable a string Iterable 这是因为我为一个函数编写了一个重载 而 mypy 不理解我 我的功能看起来像这样 overload
  • 将 Scikit-Learn OneHotEncoder 与 Pandas DataFrame 结合使用

    我正在尝试使用 Scikit Learn 的 OneHotEncoder 将 Pandas DataFrame 中包含字符串的列替换为 one hot 编码的等效项 我的下面的代码不起作用 from sklearn preprocessin
  • 具有指定置信区间的 Seaborn 条形图

    我想在 Seaborn 条形图上绘制置信区间 但我已经计算出置信区间 如何让 Seaborn 绘制我的置信区间而不是尝试自行计算它们 例如 假设我有以下 pandas DataFrame x pd DataFrame Group 1 0 5
  • 从时间序列生成日期特征

    我有一个数据框 其中包含如下列 Date temp data holiday day 01 01 2000 10000 0 1 02 01 2000 0 1 2 03 01 2000 2000 0 3 30 01 2000 200 0 30

随机推荐

  • 通过 bonjour 在两个 iOS 设备之间流式传输图像

    我的目标是通过 bonjour 将 AVCaptureOutput 捕获的图像从一台 iOS 设备流式传输到另一台设备 这是我当前的方法 1 从视频输入中捕获帧 void captureOutput AVCaptureOutput capt
  • 如何解决React Native应用程序中的TapJacking漏洞

    我知道我可以在我的视图中应用这些属性 filterTouchesWhenObscured 方法 onFilterTouchEventForSecurity 但我想应用于我的每个可点击视图 那么我该如何应用它 我今天需要修复窃听场景 对我的应
  • 从 VPC 内部访问 VPC 外部的 AWS 资源 - 无服务器框架

    我正在尝试从 VPC 内部的 lambda 函数访问 VPC 外部的运动流 目前 当执行写入 kinesis 流的代码时 它将挂起 然后超时 当我将 lambda 从 VPC 中取出时 写入流的代码工作正常 但我需要访问 VPC 内的资源
  • 缓存控制标头和浏览器缓存 IIS7

    我在 IIS7 的网站上使用 Google Page Speed 我想知道如何设置 利用浏览器缓存 以下资源缺少缓存过期时间 利用代理缓存 考虑向以下资源添加 Cache Control public 标头 以web config中的sys
  • 在线性回归模型中包含误差项

    我想知道是否有一种方法可以包含线性回归模型的误差项 例如 r lm y x1 x2 代码r lm y x1 x2 意味着我们将 y 建模为 x1 和 x2 的线性函数 由于模型并不完美 因此会存在残差项 即模型未能拟合的剩余项 在数学方面
  • linq orderby 使用属性名称字符串

    我有一个需要订购的清单 例如 var list someelements 我还有一个参数 它说明我应该按哪个属性和哪个方向订购列表数据 例如 var sortby Name var sortdirection desc 我想知道是否可以将字
  • 如何让 AutoMapper 不缓存映射对象?

    当 AutoMapper 遇到一个已经映射的对象时 它似乎会再次使用该对象 而不是尝试重新映射它 我相信它这样做是基于 Equals 我有一棵正在绘制地图的树 因此 一个具有一些属性和子节点的节点 多个节点具有相同的值 Equals 因为它
  • 渲染后如何将焦点设置在输入字段上?

    渲染组件后将焦点设置在特定文本字段上的反应方式是什么 文档似乎建议使用 refs 例如 Set ref nameInput 在渲染函数中的输入字段上 然后调用 this refs nameInput getInputDOMNode focu
  • 如何使用 openjdk:7 Docker 镜像和 Gradle 包装器避免“EC 参数错误”?

    这个 Dockerfile FROM openjdk 7 WORKDIR restdocs RUN git clone https github com spring projects spring restdocs git restdoc
  • Jackson反序列化convertValue与readValue

    我有一个包含 JSONObjects 的 org json JSONArray 我正在尝试将它们映射到 POJO 我知道我想要映射到的 POJO 的类型 我有两个选择 我正在尝试找出哪个性能更好 选项1 ObjectMapper mappe
  • 在 php 中使用断言进行类型检查?

    我使用异常抛出函数对 php 中的类中的参数进行了一些检查 我有进行基本检查的功能 in array等 并在 false 时抛出异常 所以我可以做assertNumeric argument argument is not numeric
  • 使用 AngularJS 和 Highlight.js 进行动态语法突出显示

    我正在构建一个网站来说明常见的应用程序漏洞 例如 SQL 注入 我在用AngularJS and 高亮 js创建交互式示例 如何让 AngularJS 和highlight js 都更新我的代码片段 Example 这把小提琴 http j
  • 重复使用表格单元格中的 UIswitch

    我的 uiswitch 有问题UITableViewCell每当我更改属于特定部分的特定单元格中的开关值时 所有其他具有相同部分的单元格inexPath row改变 请帮忙 这是我的代码cellForRowAtIndexPath metho
  • 把一个偶数分成N份,每份都是2的倍数

    假设我有号码100我需要将其分为 N 部分 每个部分最初不应超过 30 因此初始分组为 30 30 30 余数 即 10 将通过连续向每个组添加 2 来分配到这三个组中 从而确保每个组都是 2 的倍数 因此 所需的输出应类似于 34 34
  • html DOM 节点限制

    我正在开发一个终端模拟器以获取乐趣 并了解后端的基础知识和运行 然而 我不断遇到前端的性能问题 大家可能都知道 终端窗口中的每个字符都可以有不同的样式 颜色 背景 粗体 下划线等 所以我的想法是使用 span 对于视图窗口中的每个字符 并在
  • 如何获取 Angular Material 滑块的当前值?

    我的问题与获取角度 2 中的 mdslider 值 https stackoverflow com questions 46906219 get mdslider value in angular 2因为我需要将滑块的值传递给组件 而不是
  • Java 中的 MidiUnavailableException?

    我在 Java 中播放 MIDI 文件时遇到一些问题 我得到的是一个MidiUnavailableException MIDI OUT transmitter not available 当我尝试玩它时 我的代码是标准的 try midis
  • 在 Python 中解压格式字符

    我需要这个 Perl 字符串的 Python 模拟 unpack nNccH string val 我需要nNccH Python 格式字符的数据格式 在 Perl 中 它将二进制数据解压为五个变量 网络 中的 16 位值 大端 网络 中的
  • 如何在 Vue.js 中延迟 @keyup 处理程序

    my view ns input filterName type text v model filterName keyup searchTimeOut 在我的 vue 代码中 getUsers API users index params
  • QStyledItemDelegate 绘制刷新问题

    我目前正在尝试研究模型视图方法并编写缩略图查看器应用程序 在此示例中 我只是尝试绘制 20 个框 但我得到的似乎是随机选择 该选择会随着鼠标移动而更新 滚动使事情变得更糟 有时绘制的只有框等 而且文本似乎根本没有渲染 对我来说 这看起来像是