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