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
还可以这样:
#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的使用问题的主要内容,如果未能解决你的问题,请参考以下文章