Qt自定义提示弹窗

Qt自定义提示弹窗

目录
Qt自定义提示弹窗
1.添加文件
MessageBox.h
MessageBox.cpp
最后添加 MessageBox.ui 文件
2.调用头文件添加代码cpp文件添加代码

1.添加文件

MessageBox.h

#ifndef CMESSAGEBOX_H
#define CMESSAGEBOX_H
#include <QDialog>
#include <QWidget>
#include <QToolButton>
#include <QLabel>
#include <QEventLoop>
#include <QDebug>
#include "Include/titlebar.h"
//关闭按钮大小
const int iCloseButtonSize = 12;
//标题栏高度
const int iHeightTitleBarMessageBox = 30;
namespace Ui {
class CMessageBox;
}
class CMessageBox : public QDialog
{
Q_OBJECT
public:
enum Result
{
Yes = 1,//yes按钮
No,//no按钮
Cancel//取消按钮
};
public:
CMessageBox(const char* pchTitle, const char* pchText, int ButtonNum = 1, QWidget *parent = 0);
~CMessageBox();
public:
//添加标题栏
void addTitleBar(QString strTitle = "Dialog");
//获取标题栏高度
int GetTitleBarHeight();
int Exec(QPoint point);
int exec();
public slots:
void onClickYes();
void onClickNo();
void onClickCancel();
protected:
//窗口大小改变
void resizeEvent(QResizeEvent *event);
void closeEvent(QCloseEvent * event);
private:
//背景图片
//QPixmap m_pixmapBackgroud;
//标题栏
titlebar* m_pTitleBarQMessageBox;
private:
Ui::CMessageBox *ui_MessageBox;
int m_iChooseResult;
QEventLoop * m_eventLoop;
};
#endif // MESSAGEBOX_H

MessageBox.cpp

#include "MessageBox.h"
#include "ui_MessageBox.h"
#include <QApplication>
#include <QMouseEvent>
#include <QPainter>
#include <QHBoxLayout>
/*******************************************************************
Function: // CBaseDialog()
Description: // 构造函数,初始化数据,加载背景图片
Input: // QWidget *parent:父窗口
Output: // 无
Return: //
*******************************************************************/
CMessageBox::CMessageBox(const char* pchTitle, const char* pchText, int ButtonNum, QWidget *parent)
: QDialog(parent),
ui_MessageBox(new Ui::CMessageBox),
m_pTitleBarQMessageBox(NULL)
{
ui_MessageBox->setupUi(this);
//应用样式 apply the qss style
QFile file(":/qss/qss/MessageBox.qss");
file.open(QFile::ReadOnly);
QTextStream filetext(&file);
QString stylesheet = filetext.readAll();
this->setStyleSheet(stylesheet);
file.close();
// QFile file(":/qss/qss/MessageBox.qss");
// if(file.open(QIODevice::ReadOnly | QIODevice::Text))
// {
// qApp->setStyleSheet(file.readAll());
// file.close();
// }
titlebar::TitleInfo l_titleInfo;
l_titleInfo.m_FontSize = 22;
l_titleInfo.m_bkcolor = QColor(255, 255, 255);
l_titleInfo.m_Height = 46;
l_titleInfo.m_bmaxNeed = false;
l_titleInfo.m_Textcolor = QColor(255, 255, 255);
l_titleInfo.m_bminNeed = false;
l_titleInfo.m_bcloseNeed = true;
m_pTitleBarQMessageBox = new titlebar(nullptr, Qt::Dialog);
l_titleInfo.m_strTitle = QStringLiteral("提示");
m_pTitleBarQMessageBox->SetTitleBarInfo(this, &l_titleInfo);
m_pTitleBarQMessageBox->setFixedSize(440, 250);
m_pTitleBarQMessageBox->show();
//去除标题栏
// setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::FramelessWindowHint);
// setModal(true);
QString l_strTitle = QString::fromLocal8Bit(pchTitle);
addTitleBar(l_strTitle);
// QString l_strText = QString::fromLocal8Bit(pchText);
ui_MessageBox->label->setText(pchText);
// ui_MessageBox->label->setReadOnly(true);
QPalette l_palette;
l_palette.setBrush(QPalette::Background, QBrush(QColor("#1687d3")));
this->setPalette(l_palette);
//设置界面样式
// this->setStyleSheet("QToolButton{background-color:#000000;border:1px solid #1687d3;} ");
// ui_MessageBox->pushButton_OK->setStyleSheet("QPushButton{border-image:url(:/ico/image/QPushButton_default.png;)"
// "border:1px; "
// "border-radius:4px;"
// "color:#ffffff;"
// "font-size:18px; } \
// QPushButton::hover{border-image:url(:/ico/image/QPushButton_suspension.png);} \
// QPushButton::pressed{border-image:url(:/ico/image/QPushButton_press.png);} \
// ");
// ui_MessageBox->pushButtonNo->setStyleSheet("QPushButton{background-color:#fafafa;"
// "border:1px solid #b7b6b6; "
// "border-radius:4px;"
// "color:#131313;"
// "font-size:10px; } \
// QPushButton::hover{background-color: #e8e8e8; } \
// QPushButton::pressed{background-color:#dadada;} \
// ");
// ui_MessageBox->pushButton_Cancel->setStyleSheet("QPushButton{background-color:#fafafa;"
// "border:1px solid #b7b6b6; "
// "border-radius:4px;"
// "color:#131313;"
// "font-size:10px; } \
// QPushButton::hover{background-color: #e8e8e8; } \
// QPushButton::pressed{background-color:#dadada;} \
// ");
// ui_MessageBox->widget->setStyleSheet("background-color:rgba(166,202,235,45%)");
// ui_MessageBox->textEdit->setStyleSheet("QTextEdit{color:#131313; font-size:14px; border:none;}");
QFont l_font("Microsoft YaHei",12);
// m_pTitleBar->setFont(l_font);
ui_MessageBox->label->setFont(l_font);
// ui_MessageBox->label_Text->setTextFormat(Qt::PlainText);
// ui_MessageBox->label_Text->adjustSize();
// ui_MessageBox->label_Text->setGeometry(QRect(10, 10, 290, 27*4));
// ui_MessageBox->label_Text->setWordWrap(true);
// ui_MessageBox->label_Text->setAlignment(Qt::AlignTop);
ui_MessageBox->pushButton_OK->setFont(l_font);
ui_MessageBox->pushButton_Cancel->setFont(l_font);
/*QRect l_rect = this->geometry();*/
this->setGeometry(750, 480, 415, 141);
if (1 == ButtonNum)
{
ui_MessageBox->pushButton_OK->setGeometry(ui_MessageBox->pushButton_Cancel->geometry());
ui_MessageBox->pushButton_Cancel->hide();
ui_MessageBox->pushButtonNo->hide();
connect(ui_MessageBox->pushButton_OK, SIGNAL(clicked()), this, SLOT(onClickYes()));
}
else if (2 == ButtonNum)
{
ui_MessageBox->pushButtonNo->hide();
//connect(ui->pushButton_OK, SIGNAL(clicked()), this, SLOT(accept()));
//connect(ui->pushButton_Cancel, SIGNAL(clicked()), this, SLOT(reject()));
connect(ui_MessageBox->pushButton_OK, SIGNAL(clicked()), this, SLOT(onClickYes()));
connect(ui_MessageBox->pushButton_Cancel, SIGNAL(clicked()), this, SLOT(onClickNo()));
ui_MessageBox->pushButton_OK->setGeometry(ui_MessageBox->pushButton_OK->geometry().x() + 30, ui_MessageBox->pushButton_OK->geometry().y(),
ui_MessageBox->pushButton_OK->geometry().width(), ui_MessageBox->pushButton_OK->geometry().height());
ui_MessageBox->pushButton_Cancel->setGeometry(ui_MessageBox->pushButton_Cancel->geometry().x() - 10, ui_MessageBox->pushButton_Cancel->geometry().y(),
ui_MessageBox->pushButton_Cancel->geometry().width(), ui_MessageBox->pushButton_Cancel->geometry().height());
}
else if (3 == ButtonNum)
{
ui_MessageBox->pushButton_OK->setText(QString::fromLocal8Bit("是"));
connect(ui_MessageBox->pushButton_OK, SIGNAL(clicked()), this, SLOT(onClickYes()));
connect(ui_MessageBox->pushButtonNo, SIGNAL(clicked()), this, SLOT(onClickNo()));
connect(ui_MessageBox->pushButton_Cancel, SIGNAL(clicked()), this, SLOT(onClickCancel()));
}
}
CMessageBox::~CMessageBox()
{
delete ui_MessageBox;
}
/*******************************************************************
Function: // addTitleBar()
Description: // 添加标题栏,并将当前窗口上的所有控件向下移动
// 移动距离为标题栏的高度
Input: // QString strTitle:标题栏的标题名称
Output: // 无
Return: // void
*******************************************************************/
void CMessageBox::addTitleBar(QString strTitle /*= "Dialog"*/)
{
//窗口宽度
int l_iWidth = this->size().width();
//窗口高度
int l_iHeight = this->size().height();
if (NULL == m_pTitleBarQMessageBox)
{
m_pTitleBarQMessageBox = new titlebar(this);
//将该窗口高度增加标题栏的高度
this->resize(l_iWidth, l_iHeight + iHeightTitleBarMessageBox);
m_pTitleBarQMessageBox->show();
}
}
/*******************************************************************
Function: // GetTitleBarHeight()
Description: // 获取标题栏高度
Input: // 无
Output: // 无
Return: // int 标题栏高度
*******************************************************************/
int CMessageBox::GetTitleBarHeight()
{
return iHeightTitleBarMessageBox;
}
int CMessageBox::Exec(QPoint point)
{
//调整位置
QSize l_size = this->size();
this->setGeometry(point.x(), point.y(), l_size.width(), l_size.height());
return QDialog::exec();
}
/*******************************************************************
Function: // exec()
Description: // 重写exec方法
Input: // 无
Output: // 无
Return: //
*******************************************************************/
int CMessageBox::exec()
{
//设置为模态
this->setWindowModality(Qt::ApplicationModal);
show();
//使用事件循环QEventLoop,不让exec()方法结束,在用户选择确定或者取消后,关闭窗口
//结束事件循环,并返回最后用户选择的结果
//根据返回结果得到用户按下了确定还是取消,采取相应的操作。从而模拟出QDialog类的
//exec()方法
m_eventLoop = new QEventLoop(this);
m_eventLoop->exec();
return m_iChooseResult;
}
/*******************************************************************
Function: // onClickYes
Description: // 是按钮对应的槽函数
Input: // 无
Output: // 无
Return: //
*******************************************************************/
void CMessageBox::onClickYes()
{
m_iChooseResult = Yes;
close();
m_pTitleBarQMessageBox->slot_close();
}
/*******************************************************************
Function: // onClickNo()
Description: // 否按钮对应的槽函数
Input: // 无
Output: // 无
Return: //
*******************************************************************/
void CMessageBox::onClickNo()
{
m_iChooseResult = No;
close();
m_pTitleBarQMessageBox->slot_close();
}
/*******************************************************************
Function: // onClickCancel
Description: // 取消按钮对应的槽函数
Input: // 无
Output: // 无
Return: //
*******************************************************************/
void CMessageBox::onClickCancel()
{
m_iChooseResult = Cancel;
close();
m_pTitleBarQMessageBox->slot_close();
}
/*******************************************************************
Function: // resizeEvent()
Description: // 若窗口添加了标题栏,则窗口大小改变时,改变标题栏大小
Input: // QResizeEvent *event:改变窗口大小事件
Output: // 无
Return: // void
*******************************************************************/
void CMessageBox::resizeEvent(QResizeEvent *event)
{
QDialog::resizeEvent(event);
if (m_pTitleBarQMessageBox)
{
int l_iWidth = event->size().width();
m_pTitleBarQMessageBox->resize(l_iWidth, iHeightTitleBarMessageBox);
}
}
/*******************************************************************
Function: // closeEvent()
Description: // 窗口关闭事件
Input: // QCloseEvent *event:窗口关闭事件
Output: // 无
Return: // void
*******************************************************************/
void CMessageBox::closeEvent(QCloseEvent * event)
{
//关闭窗口时结束事件循环,在exec()方法中返回选择结果
if (m_eventLoop != NULL)
{
m_eventLoop->exit();
}
// m_pTitleBarQMessageBox->slot_close();
event->accept();
}

最后添加 MessageBox.ui 文件

2.调用

头文件添加代码

CMessageBox *m_MessageBox;

cpp文件添加代码

CMessageBox *l_messagBox = new CMessageBox("提示","请选中分类后添加",1,this);
l_messagBox->exec();
posted @   jixiang的小窝  阅读(2078)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示