QT中painter event的使用问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT中painter event的使用问题相关的知识,希望对你有一定的参考价值。

QPainter painter ( this);
关于这个语句,网上说是要在绘图设备(paint device,一般是一个控件)上开始绘制,我们只要创建一个QPainter,把绘图设备指针传给QPainter对象,QPaintDevice可以理解成要在哪里去画,而现在我们希望在这个widget上画,因此传入的是this指针。

如果我想在一个label上画图,可不可行,主要是想在一张图片上(在label上)添加其他的小图片~做出动态显示的样子。请问应该怎么做~~

楼上的误解了题目的意思。
你重写QLabel的paintEvent事件
然后用QPainter drawImage或是Pixmap即可

当然你要拿个图片当背景可以事先setPixmap

或是重写QWidget,先设置你的背景作为background,再重写paintEvent

或者你需要扩展更多元素就用QGraphicsView
有问题HI~追问

重写QLabel的paintEvent事件~具体应该是怎样的思路~

追答

继承QLabel
重写paintEvent虚方法
在构造方法里面setPximap

在其内部构造QPainter
QPainter painter;
painter.begin( this );
painter.drawPixmap( /* Pixmap*/ );//Pixmap instance

参考技术A (转)用定时器切换静态图片。时间间隔短一点的话,就成动态的图片了。
还可以这样:
#include <qapplication.h>
#include <qlabel.h>
//#include <qpixmap.h> //qt中的类
#include <qtimer.h>
#include <qmovie.h>
int main (int argc, char *argv[])

QApplication app(argc,argv);
QLabel *label=new QLabel ("", 0); //初始化qlabel
QMovie pm("logo.gif"); //设定要显示的图片
label->setMovie(pm); //将图片加载到label上
label->setGeometry( 0, 0, 240, 320 ); //屏幕大小,初始位置
app.setMainWidget(label); //将图片设为放置在中间
// QTimer::singleShot( 3*1000, label, SLOT(close()));//显示时间
label->show ();
return app.exec();
追问

~我的动态显示不是指单纯的用Timer定时换图片~而是因为做一个软件需要~要在一张图片上画另一张图片而原来的图片还在做为背景,大概相当于皮影剧之类的~大背景先不变~上一层的图片先改变,背景根据需要在作调整。

追答

做两层控件。底下的控件作背景,上面的做皮影

追问

两层控件?不解~具体应该如何做?

追答

两个label控件,他们的大小一样,位置重叠。一上一下。

追问

这样有一张图片是显示不了的~一直只会显示第一张~第二张图片没了

Qt - 创建 QPainter

【中文标题】Qt - 创建 QPainter【英文标题】:Qt - creating QPainter 【发布时间】:2009-06-17 15:50:03 【问题描述】:

我正在尝试在我的程序中重写方法paintEvent 并进行更改。

void MainWindow::paintEvent(QPaintEvent *event)

    QRegion reg = this->bgPixmapHandle->rect();
    QPainter painter(this);

    painter.setClipRegion(reg);
    painter.drawImage(bgPixmapHandle->rect(), bgPixmapHandle);
    painter.end();

在这里我尝试更改我的bg 图像。但是我在线出错:QPainter painter(this);

错误:变量“QPainter Painter”是 初始化,虽然类型是 不完整

【问题讨论】:

您还应该知道在这种情况下不需要painter.end()。当画家超出范围时,它的析构函数会自动为您执行此操作。 【参考方案1】:

包含 QPainter 头文件。 QPainter 类仅在您包含在该翻译单元中的 Qt 标头之一中前向声明。

【讨论】:

【参考方案2】:
#include <QPainter>

【讨论】:

【参考方案3】:

你包括吗? Qt 是类前向声明​​的忠实拥护者,这会导致此类神秘错误。

【讨论】:

以上是关于QT中painter event的使用问题的主要内容,如果未能解决你的问题,请参考以下文章

QT 5.7 QPainter 线对齐

QT使用painter绘制文字时的居中显示

Qt - 创建 QPainter

qt - 使用 QPainter 实例化绘图

如何在 Qt 中获取应用程序字体颜色

qt painter多个点的曲线