Qt5.6 自写封装MessageBox类

来源:互联网 发布:discovery纪录片知乎 编辑:程序博客网 时间:2024/06/04 18:11

1.效果图如下所示


2.代码如下,.h文件

2.代码如下,.h文件
#ifndef MESSAGEDIALOG_H
#define MESSAGEDIALOG_H
#include <QDialog>
#include <QToolButton>
#include <QPushButton>
#include <QLabel>
#include <QCheckBox>
#include <QPainter>
#include <QPaintEvent>
#include <QPixmap>
#include <QBitmap>
#include <QMouseEvent>
#include <QStyle>
namespace Ui {
class MessageDialog;
}
class MessageDialog : public QDialog
{
    Q_OBJECT
public:
    explicit MessageDialog(QWidget *parent = 0);
    ~MessageDialog();
    /****************************************静态函数*******************************/
    static MessageDialog *getInstance()
    {
        if(m_staticInstance==NULL)
        {
            m_staticInstance=new MessageDialog();
        }
        return m_staticInstance;
    }
    /****************************************设置函数*******************************/
    void setInfo(QString titleInfo,QString info,QPixmap pixmap,bool isOkHidden);
public slots:
    void okOperate();    //确定
    void cancelOperate();//取消
private:
    Ui::MessageDialog *ui;
    static MessageDialog *m_staticInstance;//静态对象
    bool mousePress;          //按钮是否被点击
    QPoint movePoint;         //鼠标移动
    QToolButton *closeButton; //关闭按钮
    QLabel *titleLabel;       //标题框
    QLabel *imgLabel;         //图片框
    QLabel *msgLabel;         //消息框
    QPushButton*cancelButton; //取消按钮
    QPushButton*okButton;     //确定按钮
     /****************************************画图函数*******************************/
    void paintEvent(QPaintEvent *event);
     /****************************************鼠标点击*******************************/
    void mousePressEvent(QMouseEvent*event);
    /****************************************鼠标释放*******************************/
    void mouseReleaseEvent(QMouseEvent *event);
    /****************************************鼠标移动*******************************/
    void mouseMoveEvent(QMouseEvent *event);
};
#endif // MESSAGEDIALOG_H




3.代码如下.cpp
#include "messagedialog.h"
#include "ui_messagedialog.h"


MessageDialog* MessageDialog::m_staticInstance=NULL;//静态对象
const QString okText="确定";
const QString cancelText="取消";


/****************************************构造函数*******************************/
MessageDialog::MessageDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MessageDialog)
{
    ui->setupUi(this);
    MessageDialog::m_staticInstance=this; //给静态变量赋值
    this->resize(320,160);    //重定义界面大小
    int width=this->width();  //获取界面宽度
    int height=this->height();//获取界面高度
    mousePress=false;         //初始化为未按下鼠标左键
    this->setWindowFlags(Qt::FramelessWindowHint);//标题框隐藏


    //加载图标
    QPixmap closePix=style()->standardPixmap(QStyle::SP_TitleBarCloseButton);
    closeButton=new QToolButton(this);
    closeButton->setIcon(closePix);
    closeButton->setGeometry(width-30,0,30,30);
    closeButton->setStyleSheet("background-image: url(:/new/prefix1/image/color.png);"
                               "background-color:transparent;");


    //设置标题
    titleLabel=new QLabel(this);
    titleLabel->setObjectName(QString::fromUtf8("labelOne"));
    QFont font=titleLabel->font();
    font.setBold(true);
    titleLabel->setFont(font);
    titleLabel->setGeometry(0,0,width-50,30);


    //设置图片
    imgLabel=new QLabel(this);
    imgLabel->setGeometry(20,50,36,36);
    imgLabel->setScaledContents(true);


    //设置消息
    msgLabel=new QLabel(this);
    msgLabel->setGeometry(65,60,width-100,50);
    msgLabel->setWordWrap(true);
    msgLabel->setAlignment(Qt::AlignTop);


    //取消按钮
    cancelButton=new QPushButton(this);
    cancelButton->resize(100,25);
    cancelButton->move(width-cancelButton->width()-10,height-35);
    cancelButton->setObjectName(QString::fromUtf8("PushButtonCancel"));


    //确定按钮
    okButton=new QPushButton(this);
    okButton->resize(100,25);
    okButton->move(width-okButton->width()-cancelButton->width()-20,height-35);
    okButton->setObjectName(QString::fromUtf8("PushButtonOK"));


    //连接信号与槽
    connect(okButton,SIGNAL(clicked(bool)),this,SLOT(okOperate()));
    connect(cancelButton,SIGNAL(clicked(bool)),this,SLOT(cancelOperate()));
    connect(closeButton,SIGNAL(clicked(bool)),this,SLOT(close()));      //关闭按钮
}


/****************************************析构函数*******************************/
MessageDialog::~MessageDialog()
{
    delete ui;
}


/****************************************设置函数*******************************/
void MessageDialog::setInfo(QString titleInfo, QString info, QPixmap pixmap, bool isOkHidden)
{
    //设置标题
    titleLabel->setText(" "+titleInfo);


    //设置提示信息
    msgLabel->setText(info);


    //设置图标
    imgLabel->setPixmap(pixmap);


    //是否隐藏确定按钮
    okButton->setHidden(isOkHidden);
    if(isOkHidden)
    {
        cancelButton->setText(okText);
    }
    else
    {
        okButton->setText(okText);
        cancelButton->setText(cancelText);
    }
    //设置默认按钮为取消按钮
    cancelButton->setFocus();
}


 /****************************************画图函数*******************************/
void MessageDialog::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.drawPixmap(rect(),QPixmap(":/new/prefix1/image/background1.png"));
    QBitmap bitmap(this->size());
    QPainter painter2(&bitmap);
    painter2.fillRect(bitmap.rect(),Qt::white);
    painter2.setBrush(QColor(0,0,0));
    painter2.drawRoundedRect(rect(),4,4);
    setMask(bitmap);
}




/****************************************鼠标点击*******************************/
void MessageDialog::mousePressEvent(QMouseEvent *event)
{
    if(event->button()==Qt::LeftButton)
    {
        mousePress=true;
    }
    movePoint=event->globalPos()-pos();
}


/****************************************鼠标释放*******************************/
void MessageDialog::mouseReleaseEvent(QMouseEvent *event)
{
    mousePress=false;
}




/****************************************鼠标移动*******************************/
void MessageDialog::mouseMoveEvent(QMouseEvent *event)
{
    if( mousePress)
    {
        QPoint movePos=event->globalPos();
        move(movePos-movePoint);
    }
}




/****************************************确定函数*******************************/
void MessageDialog::okOperate()
{
    this->accept();
}


/****************************************取消函数*******************************/
void MessageDialog::cancelOperate()
{
    this->reject();
}
4.调用该类进行显示MessageBox
#include "MessageBox/messagedialog.h"
在你需要显示的地方进行调用
MessageDialog::getInstance()->setInfo(tr("系统提示"),tr("对不起,姓名为空,请填写姓名!"),QPixmap(":/new/prefix1/image/icon-fail.png"),true);
MessageDialog::getInstance()->setInfo(tr("系统提示"),tr("确定录入吗?"),QPixmap(":/new/prefix1/image/happy.png"),false);
MessageDialog::getInstance()->setInfo(tr("系统提示"),tr("恭喜你,录入成功!"),QPixmap(":/new/prefix1/image/icon-ok.png"),true);
下载地址:http://download.csdn.net/detail/yinyuchen1/9722957

0 0