问题标签 [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++ - 使用 QPainter 绘图
我需要用 绘制QPainter
,但是当我尝试不这样做时
我发现错误:
QPainter::setPen:Painter 未激活
QPainter::setBrush: Painter 未激活
我可以使用QPainter
not in voidpaintEvent( QPaintEvent* )
吗?
谢谢你。
qt4 - 如何使 QImage 或 QPixmap 半透明 - 或者为什么 setAlphaChannel 已过时?
4.7 并且喜欢在 qgraphicsview 上叠加两个图像。顶部的图像应该是半透明的,以便可以看穿它。最初,两个图像都是完全不透明的。我希望有一些函数可以为每个像素设置一个全局 alpha 值,但似乎没有这样的函数。最接近它的是 QPixmap::setAlphaChannel(const QPixmap & alphaChannel),然而,它自 Qt-4.6 起就被标记为过时了。相反,该手册引用了 QPainter 的 CompositionModes,但我没有成功地将透明度添加到我想要的不透明图像中。谁能指出我的工作示例或分享一些代码?
编辑: 我几乎很抱歉有一个自己的答案,现在就在问这个问题几个小时后。从这篇文章中,我发现以下代码可以完成这项工作。我只是想知道这是否被认为比逐像素修改 alpha 值“更好”(通常转化为更快)。
fonts - qpainterpath.addtext 忽略 qfont 权重
使用 Qt 4.7.0,我们需要一些文本在正常和粗体之间显示。这是我们正在做的事情:
在Paint
我们的子类的方法中QGraphicsObject
,我们有一个QFont
我们调用setWeight(58)
的方法。我们创建一个QPainterPath
并调用它的addText
方法,传入我们的QFont
.
然后我们使用QPainter
参数调用drawPath
,传入我们的QPainterPath
.
我们发现字体粗细从 50 到 62 的变化对其绘制方式没有影响。字体粗细为 63 到 75 时,字体被绘制为粗体。
我们如何才能让 fontWeight 像我们期望的那样工作?
qt - 使用着色器时在 QGLWidget 中使用 QPainter over OpenGL
你们中的许多 Qt(特别是 4.6)用户将熟悉 OpenGL 教程中提供的 Overpainting 示例,我正在尝试做一些非常相似的事情,但使用纯 OpenGL 数据的着色器,而不是旧的固定功能管道。
我正在构建一个 3D 资产应用程序,因此是网格的东西。为了让它在工作时变得非常明显,小部件的左上角应该出现一个大的红色矩形 - 但它没有。
3D 工作正常,但 QPainter 在屏幕上什么也没有。我可以看到我的和文档之间唯一真正的区别是所有投影和变换矩阵计算都隐藏在其他函数中,然后通过 glUniform 上传到着色器。大概当 QPainter 将 2D 资源分割成三角形时,这意味着 QPainter 的着色器无法访问我的投影/变换矩阵,所以我的红色三角形开始绘制 - 但可能在屏幕外的某个地方。
c++ - QPainter 未激活
以下代码导致一堆错误:
错误:
如何解决此错误?
c++ - 创建 QGradient
现在我只是想用渐变填充创建一个圆圈:
然而,这一切只是向我展示了一个完全白色的圆圈。我该如何纠正这个问题?
c++ - 无法在 QT C++ 中覆盖 VideoWidget paintEvent()
我正在尝试在 Phonon 库中的 VideoWidget 上绘制一些形状,但我无法覆盖 paintEvent() 方法。
如果我尝试实现这样的方法:
我得到这个错误:没有在类'Phonon::VideoWidget'中声明的'void Phonon::VideoWidget::paintEvent(QPaintEvent*)'成员函数</p>
因此,我决定使用受保护的方法 paintEvent 创建一个 myVideoWidget 标头,并在 mainwindow.cpp 中实现它,如下所示:
程序运行,但它不绘制任何东西或显示“repintando”消息。
谁能帮我?我究竟做错了什么?
非常感谢!
qt - 使用窗口/视口翻转 QPainter y 轴
我正在使用 Qt 4.7 QPainter 将一些多边形等绘制到小部件中。我希望改变坐标系,使 (0,0) 位于我的小部件的中心,并且 x/y 轴以标准的“笛卡尔”方式运行(即 y 增加“向上”并减少“下”)。换句话说,如果您知道我的意思,我希望坐标是“数学”而不是“计算机图形”。:-)
我正在尝试使用 setViewport() 和 setWindow() 来执行此操作,而不是自己进行数学运算,因为能够直接使用我的坐标调用绘图方法会很好。
这是我到目前为止所得到的:
现在它工作得很好,因为它在屏幕中间绘制了一个漂亮的蓝色方块。问题是,我不得不说左上角是(-10, -10)。我希望能够做到 (-10, 10),因为这就是笛卡尔坐标中的情况。
我尝试使用 setWindow/setViewport 来获得这个“y 轴翻转”,但无济于事。这似乎是一件非常容易/基本的事情,但是在搜索了 Qt 文档和网络之后,我无法弄清楚!
谢谢,
克里斯
qt - Qt QPixmap QPainter问题
我有一段代码有这行代码:
但是,当我运行代码时,我看不到任何带有黑色矩形的白色图像。事实上,我看到的是用大字体写的窗口标题。似乎没有任何效果,我只是得到这样的图像。我究竟做错了什么?
谢谢!
c++ - 我如何知道正在调用 QGraphicsItem::paint() 进行打印?
我有一个自定义QGraphicsItem
显示大型(100 MB 压缩,多通道)图像。它现在工作得很好。
这个想法只是加载当前视图比例和图形视图端口所需的扫描线。并将显示划分为内置在单独线程中的图块。该paint()
函数仅构造图块并将它们提供给 QThreadPool。它还检查并绘制任何已完成的图块。有更多代码处理线程/可运行对象和项目之间的事件。但这是基本的部分。
目标是提供响应式 UI。当项目自行更新时,UI 不会被阻止。这一切都很好,直到我试图弄清楚如何打印它。
问题是我需要知道对我的绘画函数的特定调用是由打印而不是屏幕更新引起的。这需要阻塞主线程,直到我所有的图块都完成并绘制给画家(或者打印页面将是空白的,因为 paint() 立即返回)
它还有助于调整采样率,因为打印机的分辨率高于屏幕。
所以我的问题归结为:我怎样才能知道QPainter
传递给我paint()
的是屏幕还是打印机。更好的是,我可以判断调用是用于打印预览还是实际打印?
谢谢。