QT 自定义模态对话框
2018-10-10 15:16
411 查看
新建一个MsgBox类
msgbox.h 代码
#ifndef MSGBOX_H #define MSGBOX_H #include <QDialog> #include <QPushButton> #include <QLabel> #include <QMouseEvent> #include <QFont> #include <QPixmap> #include <QPainter> #include<QBitmap> class MsgBox : public QDialog { Q_OBJECT public: MsgBox(QWidget *parent = 0); ~MsgBox(); public: QPushButton *ok_button; QPushButton *close_button; QPushButton *cancel_button; QLabel *ask_label; QLabel *msg_label; QLabel *title_label; QString ok_text; QString cancel_text; public: void setInfo(QString title_info, QString info,QPixmap pixmap, bool is_ok_hidden,QString language); protected: QPoint move_point; bool mouse_press; void paintEvent(QPaintEvent *); void mousePressEvent( QMouseEvent * event ); void mouseReleaseEvent( QMouseEvent *); void mouseMoveEvent(QMouseEvent *event); public slots: void okOperate(); void cancelOperate(); void closeOperate(); }; #endif // MSGBOX_H
msgbox.cpp 代码
#include "msgbox.h" MsgBox::MsgBox(QWidget *parent) : QDialog(parent) { this->resize(320, 160); //获取主界面的宽度 int width = this->width(); int height = this->height(); //初始化为未按下鼠标左键 mouse_press = false; //设置标题栏隐藏 this->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog); close_button = new QPushButton(this); //close_button->loadPixmap(":/image/images/bg.png"); close_button->setGeometry(width-30,5, 20, 20); close_button->setStyleSheet("border-image:url(:/image/images/closeBtn.png);"); //设置标题 title_label = new QLabel(this); title_label->setObjectName(QString::fromUtf8("labelOne")); QFont font = title_label->font(); font.setBold(true); title_label->setFont(font); title_label->setGeometry(0, 0, width-50, 30); //设置提示图片 msg_label = new QLabel(this); msg_label->setGeometry(20, 50, 36, 36); msg_label->setScaledContents(true); //设置提示信息,让QLabel能够自动判断并换行显示: ask_label = new QLabel(this); ask_label->setGeometry(65, 60, width-50, 25*2); ask_label->setWordWrap(true); ask_label->setAlignment(Qt::AlignTop); cancel_button = new QPushButton(this); cancel_button->resize(70, 25); cancel_button->move(width - cancel_button->width() - 10, height - 35); ok_button = new QPushButton(this); ok_button->resize(70, 25); ok_button->move(width - ok_button->width() - cancel_button->width() - 20, height - 35); ok_button->setObjectName(QString::fromUtf8("pushButtonTwo")); cancel_button->setObjectName(QString::fromUtf8("pushButtonTwo")); QObject::connect(ok_button, SIGNAL(clicked()), this, SLOT(okOperate())); QObject::connect(close_button, SIGNAL(clicked()), this, SLOT(closeOperate())); QObject::connect(cancel_button, SIGNAL(clicked()), this, SLOT(cancelOperate())); } MsgBox::~MsgBox() { } //设置对话框信息 void MsgBox::setInfo(QString title_info, QString info,QPixmap pixmap,bool is_ok_hidden,QString language) { title_label->setText(QString(" ") + title_info); //设置提示信息 ask_label->setText(info); msg_label->setPixmap(pixmap); //是否隐藏确定按钮 ok_button->setHidden(is_ok_hidden); if(is_ok_hidden) { if(language == "中文") { cancel_button->setText(tr("确定")); } else if(language == "英文") { cancel_button->setText(tr("OK")); } else if(language == "泰文") { cancel_button->setText(tr("แน่ใจว่า")); } } else { if(language == "中文") { ok_button->setText(tr("确定")); cancel_button->setText(tr("取消")); } else if(language == "英文") { ok_button->setText(tr("OK")); cancel_button->setText(tr("Cancel")); } else if(language == "泰文") { ok_button->setText(tr("แน่ใจว่า")); cancel_button->setText(tr("การยกเลิก")); } } //设置默认按钮为取消按钮 cancel_button->setFocus(); } void MsgBox::paintEvent(QPaintEvent *) { QPainter painter(this); painter.drawPixmap(rect(), QPixmap(":/image/images/close.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 MsgBox::mousePressEvent( QMouseEvent * event ) { //只能是鼠标左键移动和改变大小 if(event->button() == Qt::LeftButton) { mouse_press = true; } //窗口移动距离 move_point = event->globalPos() - pos(); } void MsgBox::mouseReleaseEvent( QMouseEvent *) { mouse_press = false; } void MsgBox::mouseMoveEvent(QMouseEvent *event) { //移动窗口 if(mouse_press) { QPoint move_pos = event->globalPos(); move(move_pos - move_point); } } //确认操作 void MsgBox::okOperate() { this->accept(); } //取消操作 void MsgBox::cancelOperate() { this->reject(); } //关闭窗体操作 void MsgBox::closeOperate() { close(); }
主函数调用代码:
#include "msgbox.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MsgBox w; w.setInfo(QString("提示:"),QString("是否关机?"),QPixmap(":/image/images/tip.png"),false,QString("中文")); w.show(); return a.exec(); }
目录构建图:
实现效果图:
相关文章推荐
- Linux下QT实现自定义对话框以及设置模态和非模态对话框
- QT模态对话框及非模态对话框
- qt学习四部曲(Console;QByteArray;模态对话框;多线程及事件通信 )
- Qt深入浅出(八)模态对话框
- 微信小程序-自定义模态对话框实例
- Qt模态对话框与事件循环
- 微信小程序—自定义模态对话框实例
- QT 点击自定义QDialog类"确定"按钮 , 模态框立刻关闭 , 之后又做空值检查问题解决
- 学习笔记之Qt自定义对话框
- VC线程中通过自定义消息打开新的对话框(模态与非模态)
- Qt按ESC关闭模态对话框不触发closeEvent()问题解析(ESC默认调用的是reject()函数,所以必须覆盖这个函数才会有效果)good
- 微信小程序--自定义模态对话框
- 【微信小程序】自定义模态对话框实例
- Qt对话框的生命周期及模态设置
- Qt 模态对话框与非模态对话框及生命周期
- QT 模态对话框和非模态对话框
- QT模态对话框
- Qt按ESC关闭模态对话框不触发closeEvent()问题解析
- QT-文件选择对话框的模态与非模态
- QT创建模态对话框阻塞整个应用程序和非模态对话框唯一性约束的简单示例