问题标签 [qpainter]
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++ - QPaint不画任何东西
我有最基本的 Qt 程序——一个主窗口。我希望能够使用 QPainter 来绘制一些线条——实际上只不过是线条(我正在尝试绘制直方图)。无论如何,我已经阅读了代码示例,但由于某种原因,我的代码无法正常工作。
我有一个mainwindow.ui,它创建了一个名为MainWindow的类,我没有显示它——它只是一个QMainWindow ,上面有一个QWidget,但我隐藏了QWidget,因为我现在没有使用它。main.cc也没有显示,因为它是小型项目的标准main.cc。其余的代码是:
主窗口.cc
主窗口.h
qt - 在 QWidget 上自定义 QPaintPath 绘图算法
如何自定义 QPainterPath 的绘图算法?
我想通过只绘制可见元素来加速我的应用程序。
我正在从 QPainterPath 绘制实时绘图,并希望这样做:
- QPainterPath 最左边可见元素的二分搜索。
- QPainterPath 最右边可见元素的二进制搜索。
- 仅绘制可见元素。
我想我应该通过自定义 QWidget 的 QPaintEngine QWidget::paintEngine()
。
但QPaintEngine::drawPath(...)
默认实现什么也不做。
我是对还是错?
更新:
谢谢你的回应,科英。
我刚刚尝试过这种方式:
一切都很好!对于任何元素计数,我都有固定的时间开销。
你有什么建议可以加快我的代码速度吗?
UDPATE:
读取 QPainterPath 并从另一个线程向其中添加元素时出现错误。有时应用程序会因调用堆栈而崩溃:
QtCored4.dll!qt_message_output(QtMsgType msgType, const char * buf) 第 2240 行 C++ QtCored4.dll!qt_message(QtMsgType msgType, const char * msg, char * ap) 第 2298 行 + 0x12 字节 C++ QtCored4.dll!qFatal(const char * msg, ...) Line 2481 + 0xf bytes C++ QtCored4.dll!qt_assert(const char * assertion, const char * file, int line) Line 1999 + 0x16 bytes C++ QtGuid4.dll!QPainterPath::elementAt(int i) Line 405 + 0x36 字节 C++ MyPlot.dll!MyPlot::paintEvent(QPaintEvent * event) 第 172 行 + 0x13 字节 C++
在调用 elementAt(i) 时,i == 4303 并且有 5459 个元素。
也许元素计数对于崩溃的时刻是不真实的?
当第一个线程崩溃时,第二个线程可以修改元素计数吗?
我的线程是这样工作的:我的 gui 线程只使用只读方法。我的第二个线程每秒增加 1-5 千点。
qt - 在 QListWidget 中的 QPixmap 上绘画
我在 QListWidget 中有一个 QListWidgetItem 列表(Hor 滚动条在那里,因为项目数量很大)。每个 QListWidgetItem 都包含一个 QPixmap 作为数据(按比例缩小到某个随机值)。我的要求是单击应该突出显示的 QPixmap(画笔宽度 10 的圆角矩形)。我将每个 QListWidgetItem 委托给 QItemDelegate。我在这里有几个问题。
选择对应的QListWidgetItem时如何绘制QPixmap的圆角矩形?
上面提到的绘制事件应该在单击 QPixmap 时发生(而不是在 QListWidgetItem 的其他部分)。由于 QPixmap 的大小不同,QListWidgetItem 中 QPixmap 的顶部和底部将为空,单击此处也会触发 ItemDelegate。如何摆脱这种选择?
qt - 如何在 QListWidget 的 QItemDelegate 内绘制 QPixmap 时将其居中
我正在 QListWidget 的 QItemDelegate 内绘制 QPixmap。每个 QListWidgetItem 都有不同的维度。在 - 的里面
QItemDelegate 的功能,我想在 QListWidgetItem 内绘制中心对齐的 QPixmap。option.rect() 给出了项目的几何形状,我可以用它计算中心位置并相应地绘制,但我想知道这种对齐的更好方法。有人可以告诉我答案吗?
c++ - 如何销毁 QPainter 对象/摆脱 drawText() 内存泄漏?
我正在尝试减少大型应用程序的内存泄漏。drawText()
使用 valgrind,我还看到了很多调用类函数时内存泄漏的实例QPainter
。根据我读过的一些资料,这可能是一个Qt
错误,但我在想也许我可以通过销毁对象来摆脱它,QPainter
就像文档所说的那样 - >“记住QPainter
在绘制后销毁对象。”
- 这样做的正确方法是什么?
drawText()
这是导致泄漏的 valgrind 日志的一个实例:
qt - 使用drawLine时如何跟踪丢失的像素
我们知道,在 qt 中绘制图像时,会使用 qpainter。最近,我使用 drawLine() 函数来绘制用户正在涂鸦的任何内容。这是通过将来自 mouseMoveEvent 的 lastPoint 和 currentPoint 传递给实现 drawLine() 的自定义函数来完成的。我已经传递了该自定义函数的参数,如下所示:
现在在 qDebug() 的帮助下,我注意到绘制时遗漏了一些像素,但绘制是精确的。我查看了 qt-painting 的来源,我看到 drawLine() 正在调用 drawLines(),它使用 qpainterPath 在图像上绘制形状。
我的问题是,是否有任何方法可以跟踪这些“丢失”的像素或找到所有已绘制的像素的方法?
谢谢!
qt - 为什么我的线宽在具有相同 QPen 宽度的 QGraphicsScene 中看起来不同?
我使用 aQPainter
用以下代码绘制我的小部件:
当我将此项目添加到 aQGraphicsScene
时,线条的宽度有时看起来彼此不同,尤其是当我放大时。谁能解释为什么会发生这种情况以及可以做些什么来解决它?
此屏幕截图演示了该问题:
qt - QPoint 不是 (0,0) 时的 QPainter::drawImage
QPainter::drawImage 有问题。我有 KameleonVNC 小部件可以将我的应用程序访问到 VNC 服务器。我已经把它放在 QFrame 上。但它在左上角绘制图像,我不喜欢这样。我刚刚看了代码,看到来自 VNC 服务器的图像QPainter::drawImage
,坐标为 0,0QPoint(0,0)
或QRect
坐标为 0,0。但是当我将坐标更改为其他坐标时,我得到了不可预测的结果。我知道它只在图片发生变化的地方绘制小图片。但我不明白如何用drawImage修复这个错误。
nokia - 诺基亚 N9 的 Qt 应用程序 - 绘制抗锯齿不起作用
我正在为诺基亚 N9 开发一个应用程序。因为我需要画东西,我使用从 QWidget 继承的类,在paintEvent 上我使用 QPainter 画一条线。
它可以工作,但是线路在我的设备上是别名的,并且在模拟器上是抗锯齿的。
我似乎认为 setRenderHints 根本不起作用并且没有效果。
文本是别名(drawText),但线不是。如果我做:
文本在 N9 上仍然有别名,在模拟器中没有别名。我被困住了。
performance - 如何在 Qt 中滚动时避免感知闪烁?
我正在尝试使用 Qt 框架(4.7.4)来演示滑动显示,其中新的像素数据被添加到屏幕的第一行,并且之前的像素在每次刷新时滚动到下方一个像素。
它每秒刷新 20 次,每次刷新时,都会在黑色背景上绘制随机的绿点(像素)。
问题是; 每次刷新都有非常明显的闪烁。我已经通过网络进行了研究并尽可能优化了我的代码。我尝试将光栅渲染与 QPainter(在 QWidget 上)和 QGraphicsScene(在 QGraphicsView 上)一起使用,甚至我尝试在 QGLWidget 上使用 OpenGL 渲染。但是,最后我仍然有同样的闪烁问题。
什么可能导致这种闪烁?我开始怀疑我的 LCD 显示器无法刷新显示以实现黑色到绿色的过渡。我还注意到,如果我选择灰色背景而不是黑色,则不会发生闪烁。