问题标签 [paintevent]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 在弹跳球中使用位图
我有一个WinForm
应用程序'Bouncing Balls',我需要在 a 上绘制球bitmap
并在此表单上显示位图。
我有一个plusButton
添加新球的,我将每个新球保存在一个列表中。
现在,该Form_Paint
方法告诉每个球自己画,它工作正常,直到有很多球并且所有应用程序变得非常慢..
这是我的代码:
表单代码的paint方法:
注意: ballsArray
来自 type AllBalls
,这是一个包装球方法的类,在他的 c'tor 中,我正在创建一个保存每个球的列表。,bmp
是在表单加载时创建的 - onForm_Load()
方法。
代码的drawImage ballsArray
:
drawImage
球码:
注意: ballLocation
是一个矩形,表示每一步运动中球的位置。
那么我做错了什么?是什么导致应用程序缓慢?
我有一个约束要在位图上绘制所有内容并将其呈现在表单上。我还传递了加载表单时创建的位图,因为我需要在其上绘制每个位图。
c++ - Qt中的PaintEvent为类的每个实例绘制相同的所有小部件
我有一个名为 MotionVectorDisplay 的类,它继承自 QWidget 并且我覆盖了paintevent,我对这个类所做的是为大小为 16x16 的特定宏块绘制运动矢量,并且一帧中有多个这些宏块,所以我创建了一个新的为每个宏块创建此类的实例,传入多个参数以构建运动矢量,并将该小部件作为父小部件传递给另一个小部件以进行显示。这一切都按预期工作,但我得到这样的输出
在我看来,当调用paintevent时,它会记住最后一次调用paint事件并保留绘制的线条并在图片中创建丑陋的混乱,这应该为几个宏块显示几行而不是全部他们。这是代码
在 MainWindow 类中构造宏块,这是 MotionVectorDisplay 类中的构造函数和 PaintEvent
qt - 为 QGraphicsView 场景创建永久静态覆盖
我正在使用 Qt(当前为 4.8)制作一个应用程序,它显示来自大量 QGraphicsScene 项目的文字映射。我想用比例注释视图。我对比例的要求是它永久固定在视口小部件上。每当视图比例发生变化(放大等)时,都需要更新它。还有其他可能的叠加项目(指南针等),所以我更喜欢通用解决方案。
我已经查看了有关此问题的早期问题,这些问题表明:
- 使用 ItemIgnoresTransform
- 使用覆盖像素图。
我尝试了 IgnoresTransform 但这种方式不起作用:我无法弄清楚如何将它固定在(比如说)视口的底角,并且在让文本和线条始终以正确的大小显示时遇到了一些困难.
我废弃了它并将 QGraphicsView 子类化,通过重新实现paintEvent(调用原始像素图,然后在顶部绘制覆盖像素图)添加一个覆盖像素图,以及一个指示它去哪里的对齐选项。编写一些像素图绘制代码会在视图上生成可用的比例。耶!......但它不适用于卷轴 - 我得到整个比例的“破碎”渲染,或者有时根本没有比例。我认为这是因为 QGraphicsView::scrollViewportBy() 使用 viewport()->scroll() 所以我想知道切换到 ViewportSmartUpdate 是否会有所帮助,但这并没有足够的帮助。我不希望切换到 ViewportFullUpdate,因为这可能会降低应用程序的速度(场景中有数百万个项目,并且需要完全重新绘制才能移动)。
所以。从这里有什么想法吗?调整我的像素图代码以写入覆盖在视口上的新的大部分透明的小部件是更好的方法吗?
谢谢你的帮助...
c++ - 控制paintGL方法 - 如何决定画什么?
我想通过按键事件来控制paintGL 方法。目的是通过推动返回来显示一个额外的点。换句话说:我画了一个漂亮的背景场景,现在我想按下返回(在 lineEdit 中),并且在已经显示的背景前面出现了一个红点。
//主窗口.cpp
//glwidget.h
//glwidget.cpp
有人可以解释一下,为什么这不起作用?没有出现红点... 的值是否int draw
受paintGL方法的影响?
c++ - C++ Qt5 QWidget 绘制事件“链式反应”——如何在没有递归的情况下实现?
简介:我正在编写一个应用程序,它在带有 VBoxlayout(“ScopeView”)的容器小部件中显示自定义 QWidgets(即“ScopeWidget”)列表。
每个 scopeWidget 都有一个指向自己的数据源类(“Scope”)的指针。这些对象在逻辑上按组排列,即一组对象之间存在一些共享参数(“ScopeShared”)。在检索(或准备)必须在 scopeWidget 上显示的数据时需要这些参数。
更进一步:scopeWidget 需要两组参数:这些由“Scope”给定,由“ScopeGroup”给定。scopeWidget 可以通过用户操作更改组中的某些共享参数,从而使该组中“Scope”持有的所有先前检索到的数据无效。默认情况下,“范围”中没有可显示的数据。数据是按需检索的——当一个paintEvent发生时(这是问题的根源)。要在“范围”中获得可显示的数据,必须处理该特定组中的所有“范围”(这会为该组中的所有“范围”生成可用数据)。
工作原理:用户强制其中一个 scopeWidgets 更改组中的共享数据。进行这些更改后,该组中“Scope”持有的所有数据都将失效,因此更改事件会重新处理整个组。并为此组中的所有 scopeWidgets 调用 update()。小部件被重绘。这行得通……</p>
问题:……是一个自发发生的paintEvent。当用户更改某些内容时——我知道这发生了,我可以在将小部件更新入队之前处理 scopeGroup。但是当“其他东西”(系统本身)执行绘画事件时,我需要在任何绘画发生之前处理整个组。所以paint事件不直接进行绘制,而是执行scopeGroup处理,然后,它绘制具有绘制事件的小部件,并为该组中的所有其他小部件调用update()——这反过来又会引发新的绘制事件,这导致下一个 scopeGroup 处理,一个paint() 和 update() 用于其他小部件,这会导致新的绘制事件——它最终作为递归重绘(和 scopeGroup 处理)
蹩脚的解决方案:标志——自发的绘画事件进行组处理,一个paint()用于请求的小部件,更新()在组中的其余小部件上,以及为每个小部件设置标志。
这个伪代码描述了这种机制:
恕我直言,什么会更好:
a)如果可以在没有事先绘制事件(或调用 update() 或 repaint() )的情况下绘制小部件……这将是最好的;],但它不能以直接和明显的方式工作——还有其他方法吗?- 或者
b) 强制系统调用自定义函数而不是绘制事件
这些“更好”的解决方案可能吗?
performance - 如何加快 QPainter drawpoint();?
我想通过drawPoint()绘制很多点。
这是可能的,但调用 repaint() 或 update() 时太慢了。
通常我会画超过 1,000,000 点。
我该怎么办?
c# - 面板中的 TextRendering 仅在标签后面时有效
我正在使用 TextRenderingHint.AntiAliasGridFit 来呈现我的文本,因为当我不这样做时,我的文本看起来很糟糕。
但是由于某些奇怪的原因,文本仅在标签后面(透明背景色)后才能呈现良好。
因此,我在面板中绘制文本,并且其中有一个与面板宽度相同的标签。当我画的文字在标签后面时,它看起来不错,否则它看起来和以前一样。任何想法是为什么?
请告诉我是否有更好的方法来获得更流畅的文本。
谢谢
c++ - 稳定 QWidget::paintEvent() 调用频率
据我了解,在对象paintEvent()
的“主循环”中执行QApplication
,并且可以花时间执行其内部系统任务,延迟队列插槽或其他事件的执行。
但是如果我需要播放非常流畅的动画并且我注意到该动画的周期性主循环延迟怎么办?我可以创建单独的特殊非常稳定的“主循环”并重新分配paintEvent()
调用它吗?
PS 是的,GPU、OpenGL 和其他不错的技术是为流畅的游戏类动画而发明的,我知道,我知道。
我的程序:http ://www.youtube.com/watch?v=KRk_LNd7EBg
解决方案
我正在寻找的paintEvent() 调用频率稳定性、GPU、OpenGL 或硬件 vsync 对我没有帮助!问题是正常行为,直到我以整数计算像素的位置。总是会有像素移动速度的冲动。为了解决我的“问题”,我必须测量实数坐标(双精度、浮点数)并实现抗锯齿算法。
c# - 使用绘画事件移动对象
我明天有一个测试,我们必须使用绘画事件来重绘我们的对象,我们可能不会使用计时器。
正如 MSDN 所说:“重绘控件时会引发 Paint 事件。” ,但是,据我所知,只有当表单最小化或变得不可见并重新可见时才会发生这种情况。
我的代码:
因此,当我多次按下键箭头时,对象仅在我重新调整表单大小后才会移动。我希望它立即移动,仅使用绘画事件。
谢谢
python - pyQt 窗口在我更改窗口之前不会更新
我有一个从硬盘驱动器加载文件的程序,其中包含绘制几个 50x50 像素正方形的指令。我还有两个ComboBox
es 应该对呈现的方块产生影响。基本上,这两个ComboBox
es 给出了文件夹和文件名。
每次我调用ComboBox
,我都可以说我调用了绘制事件,并且用于绘制图块的指令会根据选择进行更新。但是,在我切换到另一个窗口然后返回原始窗口之前,显示的方块不会更新。
这是我的paintEvent
样子
updateButton
用于将PushButton
和放置ComboBox
在屏幕的右侧。UpdateNameComobo
用于更新组合框之一,并paintTiles
用于在屏幕上绘制方块。
loadTileSet
用于从硬盘读取磁贴数据。并handleTile
用于绘制单个正方形。
那么,是什么阻碍了瓷砖的绘制?