使用drawBackground在QGraphicsView上绘制背景

2023-12-13

我在尝试绘画时遇到问题QGraphicsView/Scene。我正在画一堆QLineF as background overridingQGraphicsView::drawBackGround`。但是,当我尝试更改背景颜色时,什么也没有发生。

这是我正在做的事情的最小示例:

import sys
import platform
import ctypes
from PySide import QtCore, QtGui
from mygv import Ui_Dialog
import sys

class myView(QtGui.QDialog):
    def __init__(self, parent = None):
        QtGui.QDialog.__init__(self, parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.view.drawBackground = self.drawBackground
        self.ui.view.wheelEvent = self.wheelEvent
        self.scene = QtGui.QGraphicsScene()
        self.ui.view.setScene(self.scene)
        self.scene.addEllipse(0,0,100,100)

    def drawBackground(self, painter, rect):

        bbrush = QtGui.QBrush( QtGui.QColor(255,170,255), QtCore.Qt.SolidPattern)
        painter.setBackgroundMode(QtCore.Qt.OpaqueMode)

        pen = QtGui.QPen(QtGui.QColor(46, 84, 255))
        pen.setWidth(5)
        painter.setPen(pen)

        line1 = QtCore.QLineF(0,0,0,100)
        line2 = QtCore.QLineF(0,100,100,100)
        line3 = QtCore.QLineF(100,100,100,0)
        line4 = QtCore.QLineF(100,0,0,0)
        painter.setBackground(bbrush)
        painter.drawLines([line1, line2, line3, line4])




    def wheelEvent(self,event):
        factor = 1.41 ** (event.delta() / 240.0)
        self.ui.view.scale(factor, factor)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    diag = myView()
    diag.show()
    diag.ui.view.centerOn(50,50)
    app.exec_()

Ui_dialog 只是一个从 QDesigner 生成的标准对话框,其中包含名为“view”的 QGraphicsView 成员。

这只是问题的一个例子。我需要能够在执行应用程序期间系统地更改背景颜色。

我错过了什么或做错了什么(显然)?


The setBackground的方法QPainter不填充背景,而仅指定绘制不透明文本、点画线和位图等操作的背景(请参阅文档).

您可以使用fillRect相反,首先使用您指定的画笔填充可绘制区域大小的矩形。

Example:

import sys
from PyQt5 import QtCore, QtWidgets, QtGui

class myView(QtWidgets.QGraphicsView):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def drawBackground(self, painter, rect):

        background_brush = QtGui.QBrush( QtGui.QColor(255,170,255), QtCore.Qt.SolidPattern)
        painter.fillRect(rect, background_brush)

        pen = QtGui.QPen(QtGui.QColor(46, 84, 255))
        pen.setWidth(5)
        painter.setPen(pen)

        line1 = QtCore.QLineF(0,0,0,100)
        line2 = QtCore.QLineF(0,100,100,100)
        line3 = QtCore.QLineF(100,100,100,0)
        line4 = QtCore.QLineF(100,0,0,0)
        painter.drawLines([line1, line2, line3, line4])

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)

    scene = QtWidgets.QGraphicsScene()
    scene.addEllipse(0,0,100,100)

    view = myView(scene)
    view.show()
    view.centerOn(50,50)

    app.exec_()

它使用 PyQt5,但相当容易理解。

Result:

enter image description here

显示您指定的漂亮洋红色。

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

使用drawBackground在QGraphicsView上绘制背景 的相关文章

  • 如何在 QT 中绘制点?

    我正在用 QT 用 C 编写一个应用程序 其中有 n 个点并计算它的凸包 然而 一旦计算出来 我不知道如何绘制点并绘制船体的边界 制作菜单按钮等很简单 但我不确定我是否知道执行此操作的工具 你怎么做到这一点 图形视图 addEllipse
  • 仅在发布模式下使用 glGenBuffer 时出现未处理的异常 - QT

    我在 Windows 7 上使用 Qt 4 8 发布模式编译项目时遇到了一些问题 调试时一切正常 但在发布时我收到未处理的异常 0xC0000005 访问冲突 我将范围缩小到发生这种情况的行 即生成像素缓冲区的时间 我的第一个猜测是 DLL
  • Qt5和QML:如何使用WebEngine Quick Nano浏览器自动输入用户名和密码

    我正在使用编写一个小应用程序Qt and QML使用 Qt 文档中的示例WebEngine Quick Nano 浏览器 https doc snapshots qt io qt5 5 9 qtwebengine webengine qui
  • bash后台进程修改全局变量

    在我的 Bash 脚本中 我有一个全局变量foo设置为某个值和函数过程back func这是在后台运行的 我希望后台进程能够访问foo并修改其值 以便主进程可以看到变化 我的脚本的结构如下 bin bash foo 0 function b
  • Qt qDebug() 在 Windows shell 中不起作用

    我正在使用一个qDebug Qt 框架的printf屏幕上有东西 当我从 Qt Creator 运行应用程序时它工作得很好 但是当我尝试从 Windows 执行它时cmd它什么也没显示 为什么会发生这种情况 你必须添加 CONFIG con
  • 用 C++/Qt 编写的程序中的 RTF / doc / docx 文本提取

    我正在写一些程序Qt https en wikipedia org wiki Qt 28software 29 C 我需要从中读取文本微软Word https en wikipedia org wiki Microsoft Word RTF
  • QMutex 是否需要是静态的,以便此类实例的其他线程调用知道暂停其操作?

    从多个线程调用以下附加函数 我不希望数据重写附加 因为计数器尚未增加 除了当前使用 Append 的线程之外 这是否会挂起所有进入的线程 或者其他线程会继续运行而不追加数据吗 互斥锁是否需要是 静态 的 或者每个实例都知道要暂停操作吗 如果
  • 第一次信号发射后自动断开

    我正在从文件加载网页 然后替换其中的一些 html self template web page QtWebKit QWebPage self template web page mainFrame load QtCore QUrl tem
  • Qt 为什么使用 QString::number() 而不是 QLocale().toString()?

    我正在开发的应用程序将在许多国家推出 并且需要支持他们的语言 我一直在回顾我的代码并替换以下每个实例 QString number and QString toDouble with QLocale toString and QLocale
  • 使用 CMake 编译时更改头文件位置会导致缺少 vtable 错误

    对于一个大型 C 项目 我需要从 qmake 过渡到 CMake 但是在处理一个玩具示例时 我遇到了一些我不理解的行为 示例代码具有单个头文件 当该头文件移动到子目录中时 我收到 MainWindow 类缺少 vtable 的错误 CMak
  • 如何声明一个带有成员函数指针的函数

    我有一个类 其中的成员变量指向库对象 class myClassA private libraryClass libraryObject 该库类发出事件 以字符串为特征 并提供一种机制 允许客户端类指定在发出事件时应调用的成员函数 因此在m
  • 如何在针对 Windows XP 的情况下使用 VS2012 构建 Qt 4/5?

    我正在尝试使用 Visual Studio 2012 构建 Qt 4 8 5 Qt 5 2 1 针对 Windows XP SDK v7 1a 使用 VS2102 编译时 源代码与 SDK v7 1a 存在各种不兼容性 因此无法开箱即用 这
  • 在 Qt 中使用多个不同的流读取同一文件

    使用 Qt 是否可以使用多个流读取文件以同时访问其中的不同数据部分 请注意 Qt 中的流 QTextStream QDataStream 不处理底层设备中的位置 流类只是一个包装器 用于更轻松地解析设备 QFile 实例 内的二进制数据 因
  • 使应用程序背景适合不同设备的最佳方法

    因此 我希望通过一些漂亮的背景图像等来为我的应用程序增添一点趣味 但我很好奇的是如何确保不同的机器人正确渲染 我将在文本后面设置背景 并且我需要确保它们对于每个不同的屏幕尺寸和分辨率具有相同的尺寸和位置 有这方面好的教程吗 Thanks E
  • PySide / Python GUI 冻结

    我目前正在为 rvplayer 编写一个 GUI 它将使艺术家能够自动渲染带有板岩和老化信息的样片 GUI 使用 PySide 编写并使用 Python 2 7 编写脚本 我的问题是 在调用我的流程并更新我的QProgressBar使用 s
  • 覆盖 QWebView 中的页面回复

    我试图在 Qt 的 QWebView 中拦截页面 表单请求 并在某些情况下使用替代内容进行响应 QNetworkReply ngcBrowser createRequest Operation operation const QNetwor
  • PyQt5:在运行时更新标签

    我在运行时循环更新标签时遇到问题 我想我需要使用信号等等 但我已经尝试了我现在能想到的一切 我希望我的程序做什么 当我单击按钮时 应该启动一个循环来运行一些需要一些时间的函数 当函数运行时 相应的标签应更新其文本以显示 正在运行 当其完成时
  • 将 Pyqt GUI 主应用程序作为单独的非阻塞进程运行

    我正在寻找从 python 或 ipython 控制台运行 pyqt GUI 的可能性 基本上 主要思想是使用 Pyqt GUI 就像使用 matplotlib 绘图或图像一样 您可以将参数从控制台传递给 GUI 以查看数据 继续在控制台中
  • 使用 Matplotlib、PyQt 和 Threading 进行实时绘图导致 python 崩溃

    我一直在努力研究我的 Python 应用程序 但找不到任何答案 我有 PyQT GUI 应用程序 它使用 Matplotlib 小部件 GUI 启动一个新线程来处理 mpl 小部件的绘图 恐怕我现在通过从另一个线程访问 matplotlib
  • Android 后台服务示例,具有交互式调用方法

    我不是 Android 方面的专家 我正在寻找一个 Android 应用程序的示例 该应用程序使用一个服务 其中有真正的功能方法 或者换句话说 一个服务可以用来做什么 我们什么时候需要它 超越简单的东西服务举例 我确信您渴望获得一些工作代码

随机推荐

  • 在.net mvc 中保存数据

    我正在实现一个带有结果页面支持分页的搜索模块 NerdDinner 提供的示例将页码作为 Index 操作的参数传递 每次用户点击不同的页码时 该操作都会使用页码执行查询 我的问题是 我的搜索需要更多的标准 例如价格 材料 型号等 而不仅仅
  • 从 Windows Azure 连接到远程 SQL Server 2008

    我尝试从 Windows Azure 辅助角色连接到 SQL Server 2008 实例 不是 SQL Azure 而是远程托管的 SQL Server 2008 标准版 但收到以下错误消息 System Data SqlClient S
  • 在 onActivityResult 中检测电子邮件是否已发送

    我想在我的 onActivityResult 方法中检测人们是否已发送电子邮件或按下后退按钮或丢弃它 我怎样才能做同样的事情 我正在这样做 String reciepients result toArray new String resul
  • 实体框架 - 在事务内的“SaveChanges”之前检索 ID

    在实体框架中 在调用 SaveChanges 之前 是否有任何方法可以检索事务内新创建的 ID 身份 我需要第二次插入的 ID 但它总是返回为 0 ObjectContext objectContext IObjectContextAdap
  • 在Mongodb中存储100MB的大文件

    我想在 MongoDB 中存储 100MB 到 1GB 的大文件 就像 BLOB 对象一样 以后可以更轻松地检索它 我使用的编程语言是 PHP 请从这个意义上指导我 为此 您需要使用 GridFS 因为通常 MongoDB 文档限制为 16
  • JSF 模板:呈现的页面缺少 DOCTYPE

    TL DR 我无法让 DOCTYPE 标头出现在我的 JSF 页面上 我刚刚继承了一个 JSF 1 2 项目 该项目在 IE 下存在一些显示问题 我是 JSF 的新手 但我认为问题源于这样一个事实 渲染的页面 来自 查看源代码 不包含正确的
  • 合并两个不同时间粒度的时间序列

    我有两个包含时间序列数据的 CSV 文件 我想将这两个合并到一个文件中 File1 具有以 1 分钟为间隔的周期性数据 File2 具有非周期性的事件触发数据 File2 中数据的时间戳可能与 File1 中的数据一致 也可能不一致 我想合
  • 访问策略不可用

    我正在尝试在 Azure Key Vault 中输入访问策略 但收到消息 访问策略不可用 此密钥保管库的访问配置设置为基于角色的访问控制 要添加或管理您的访问策略 请转至访问控制 IAM 页面 在azure中 我如何输入访问策略 我已经添加
  • 如何在Sql中创建用户定义的类型

    我不知道如何创建具有可选约束的域 我试过 CREATE DOMAIN idx INT CHECK VALUE gt 100 AND VALUE lt 999 但遇到了以下错误 CREATE DROP 或 ALTER 语句中使用了未知的对象类
  • 如何使用 AngularDart 根据类型和名称进行依赖注入?

    我有两个服务 每个服务都需要一个不同的WebSocket 作为构造函数参数 我想使用 AngularDart 的依赖注入来传递 WebSocket 连接 但我不能单独依赖类型 因为我有两个 WebSocket 如何注释或指定每个服务应使用哪
  • asp.net mvc ajax post返回404未找到

    我正在尝试使用 jquery ajax 函数执行 ajax 请求 我有一个非常奇怪的行为 我的文件夹结构是这样的 我的客户端 ajax 调用 在 UserManagement Index cshtml 中 如下所示 var rolename
  • 带有多个选择框的 jQuery 验证插件

    我正在使用 jQuery Validate 来验证我的表单 问题是我有一个带有多个选择框 动态数字 的表单 并且它有一个动态名称 gt answers question id 我见过一些脚本 当有固定名称时 您可以使用它来寻址所有输入字段
  • 将 Apache ServiceMix 连接到 Websphere MQ

    我正在尝试从部署为 Apache Service Mix 上的 OSGI 包的驼峰路由连接到 websphere MQ 队列管理器 我已经部署了 Websphere MQ 附带的 IBM OSGI 包 并按如下方式配置了 Spring 配置
  • 如何在Python中对范围函数的值求和[重复]

    这个问题在这里已经有答案了 基本上我想总结表达式 k 5 的结果x 17 但 x 不同 例如 k 53 17 k 5 4 17 等等 到目前为止 我的代码如下所示 结果需要是来自范围 3 9 的 for x in range 3 9 k 5
  • 使用 jq 如何将一个非常大的 JSON 文件拆分为多个文件,每个文件都有特定数量的对象?

    我有一个很大的 JSON 文件 我猜有 400 万个对象 每个顶层都有几个嵌套在其中的级别 我想将其拆分为多个文件 每个文件包含 10000 个顶级对象 保留每个文件内部的结构 jq应该可以做到吧 我不知道怎么办 所以数据是这样的 id 1
  • 在 MVC 中提供用户通知/确认的推荐方法是什么?

    我遇到的一个常见场景是在用户执行操作后向他们提供通知 确认以告知他们成功 例如 假设用户在反馈表上提供反馈 然后单击提交反馈 您可能想显示 感谢您的反馈 消息after您已经执行了一些验证 例如他们在数据库中有有效的电子邮件 一些伪代码 p
  • 多个RDD的Spark联合

    在我的猪代码中我这样做 all combined Union relation1 relation2 relation3 relation4 relation5 relation 6 我想对火花做同样的事情 然而 不幸的是 我发现我必须继续
  • 防止 NSURLSession 默认 HTTP 标头

    我正在尝试向服务器发送一个非常具体的 HTTP 请求 即定义exactHTTP 标头集 但是NSURLSession不断 有帮助地 插入一堆 HTTP 标头 例如Accept Accept Language and Accept Encod
  • python,pandas,按组自相关

    fips year sc 0 1001 1990 0 707465 1 1001 1991 0 707465 2 1001 1992 0 707465 3 1001 1993 0 707465 4 1001 1994 0 707465 5
  • 使用drawBackground在QGraphicsView上绘制背景

    我在尝试绘画时遇到问题QGraphicsView Scene 我正在画一堆QLineF as background overridingQGraphicsView drawBackGround 但是 当我尝试更改背景颜色时 什么也没有发生