Qt中如何重载一个label的paintEvent或者mouseMoveEvent

Qt中如何重载一个label的paintEvent或者mouseMoveEvent,第1张

新建一个C++类,在d出的窗口中填写类名CLabel,并选择其父类为QLabel

然后在这个新类中添加 paintEvent或者mouseMoveEvent 成员方法;

在要用到label控件上右键->提升为... 在d出的提升对话框中添加CLabel类,选择这个类,点击提升后该label控件就可以响应你自己的paintEvent或者mouseMoveEvent方法。

这个简单,从QMessageBox派生一个类,

然后重载paintEvent函数,在paintEvent里面画张图片就搞定了。代码:

qpicmsgbox.h

///////////////////////////////////

#ifndef QPICMSGBOX_H

#define QPICMSGBOX_H

#include <QMessageBox>

#include <QImage>

class QPicMsgBox : public QMessageBox

{

Q_OBJECT

public:

explicit QPicMsgBox(QWidget *parent = 0)

QImage *pImage

protected:

virtual void paintEvent(QPaintEvent *paintevent)

signals:

public slots:

}

#endif // QPICMSGBOX_H

///////////////////////////////////////////////

qpicmsgbox.cpp

////////////////////////////////////////////

#include "qpicmsgbox.h"

#include <QString>

#include <QPainter>

QPicMsgBox::QPicMsgBox(QWidget *parent) :

QMessageBox(parent)

{

QString fileName = tr("7.jpg")

pImage = new QImage(fileName)

}

void QPicMsgBox::paintEvent(QPaintEvent *paintevent)

{

QPainter painter(this)

painter.drawImage(0, 0, pImage->scaled(this->size()))

QMessageBox::paintEvent(paintevent)

}

/////////////////////////////////////

//绘制的背景图就是7.jpg缩放的,和消息框一样大。

调用上面QPicMsgBox的时候就添加代码:

#include "qpicmsgbox.h"

/////////////////////

void MainWindow::on_actionMsg_triggered() ////调用图片消息对话框

{

QPicMsgBox *pMsgBox = new QPicMsgBox

pMsgBox->setWindowTitle(QString(tr("hello")))

pMsgBox->setText(QString(tr("hellogfkjdsgkldfsljgldsfgklfdkjhglkdfs")))

pMsgBox->addButton(QMessageBox::Ok)

pMsgBox->addButton(QMessageBox::Close)

pMsgBox->exec()/////////////exec是模式对话框,show是非模式的

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11335865.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存