首页 > 资讯 > > 内容页

【环球聚看点】Qt开发:自定义对话框

2023-04-12 05:55:56 来源:QT教程 分享到:

1、添加自定义对话类框。

首先向该项目中添加Qt设计师界面类。界面模板选择 Dialog without Buttons,类名改为MyDialog。然后在设计模式中向窗口添加两个Push Button,并且分别更改其显示文本为“进入主界面”和“退出程序”

void MyDialog::on_pushButton_clicked(){accept();}

这个accept()函数是QDialog类中的一个槽,对于一个使用exec()函数实现的模态对话框,执行了这个槽就会隐藏这个模态对话框,并返回QDialog::Accepted 值,这里就是要使用这个值来判断是哪个按钮被按下了。与其对应的还有一个 reject()槽,它可以返回一个QDialog::Rejected值,前面的“退出程序按钮也可以关联这个槽。


(资料图片)

二、另外一种自定义弹窗

设置一对按键

可以在构造函数中设置两个按键的属性

// 确认取消按钮ui->buttonBox->button(QDialogButtonBox::Ok)->setText("确定");ui->buttonBox->button(QDialogButtonBox::Cancel)->setText("取消");

以下为自定义弹窗的头文件dialogmessage.h

#ifndef DIALOGMESSAGE_H#define DIALOGMESSAGE_H#include typedef enum{MSG_INFO = 0,MSG_WARNING,MSG_ERROR,} E_MSG_TYPE;namespace Ui {class DialogMessage;}class DialogMessage : public QDialog{Q_OBJECTpublic:explicit DialogMessage(QWidget *parent = nullptr);~DialogMessage();private:Ui::DialogMessage *ui;public:/** 设置弹窗文本 */void set_messageText(E_MSG_TYPE msgType, QString title, QString context);/** 设置网络提示弹窗文本 */void set_messageNetText(E_MSG_TYPE msgType, QString title, QString context);/** 设置取消按键不显示 */void set_cancelButtonHide();/** 设置确定按键不显示 */void set_okButtonHide();/** 设置确定按键显示 */void set_okButtonShow();};#endif // DIALOGMESSAGE_H

dialogmessage.cpp文件

#include #include "dialogmessage.h"#include "ui_dialogmessage.h"#include "style.h"#include "text.h"DialogMessage::DialogMessage(QWidget *parent) :QDialog(parent),ui(new Ui::DialogMessage){ui->setupUi(this);// 隐藏默认标题this->setWindowFlags(Qt::FramelessWindowHint);// 配置标题属性QFont titleFont;titleFont.setPixelSize(MSG_TITLE_FONT_SIZE);titleFont.setFamily(MSG_TITLE_FONT_NAME);titleFont.setBold(MSG_TITLE_FONT_BOLD_EN);QColor titleColor;titleColor.setRgb(MSG_TITLE_FONT_COLOR_R, MSG_TITLE_FONT_COLOR_G, MSG_TITLE_FONT_COLOR_B);QPalette titlePalette;titlePalette.setColor(QPalette::WindowText, titleColor);ui->label_title->setFont(titleFont);ui->label_title->setPalette(titlePalette);// 设置内容属性QFont contextFont;contextFont.setPixelSize(MSG_CONTEXT_FONT_SIZE);contextFont.setFamily(MSG_CONTEXT_FONT_NAME);contextFont.setBold(MSG_CONTEXT_FONT_BOLD_EN);QColor contextColor;contextColor.setRgb(MSG_CONTEXT_FONT_COLOR_R, MSG_CONTEXT_FONT_COLOR_G, MSG_CONTEXT_FONT_COLOR_B);QPalette contextPalette;contextPalette.setColor(QPalette::WindowText, contextColor);ui->label_context->setFont(contextFont);ui->label_context->setPalette(contextPalette);// 设置背景QImage image(":/public/dialog_public.png");QPixmap px = QPixmap::fromImage(image);int w = ui->label_bg->width();int h = ui->label_bg->height();px = px.scaled(w, h, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);ui->label_bg->setPixmap(px);// 确认取消按钮ui->buttonBox->button(QDialogButtonBox::Ok)->setText("确定");ui->buttonBox->button(QDialogButtonBox::Cancel)->setText("取消");#ifdef COMPILE_KYLIN// 银河麒麟下弹窗设置透明无效,设置背景不能为黑色this->setAutoFillBackground(true);this->setWindowFlags(Qt::FramelessWindowHint);this->setAttribute(Qt::WA_StyledBackground);this->setWindowModality(Qt::ApplicationModal);#elsethis->setAttribute(Qt::WA_TranslucentBackground, true);#endif}DialogMessage::~DialogMessage(){delete ui;}void DialogMessage::set_messageText(E_MSG_TYPE msgType, QString title, QString context){ui->label_title->setText(title);if(context.size()>=11){context.insert(10,"
");}if(context.size()>=22){context.insert(21,"
");}ui->label_context->setText(context);switch(msgType){case MSG_INFO:ui->label_picture->setStyleSheet("background-image: url(:/public/info.png);");break;case MSG_WARNING:ui->label_picture->setStyleSheet("background-image: url(:/public/warning.png);");break;case MSG_ERROR:ui->label_picture->setStyleSheet("background-image: url(:/public/error.png);");break;}}void DialogMessage::set_messageNetText(E_MSG_TYPE msgType, QString title, QString context){ui->label_title->setText(title);ui->label_context->setGeometry(130,90,251,75);ui->label_context->setText(context);switch(msgType){case MSG_INFO:ui->label_picture->setStyleSheet("background-image: url(:/public/info.png);");break;case MSG_WARNING:ui->label_picture->setStyleSheet("background-image: url(:/public/warning.png);");break;case MSG_ERROR:ui->label_picture->setStyleSheet("background-image: url(:/public/error.png);");break;}}/** 设置取消按键不显示 */void DialogMessage::set_cancelButtonHide(){ui->buttonBox->button(QDialogButtonBox::Cancel)->hide();}/** 设置确定按键不显示 */void DialogMessage::set_okButtonHide(){ui->buttonBox->button(QDialogButtonBox::Ok)->hide();}/** 设置确定按键显示 */void DialogMessage::set_okButtonShow(){ui->buttonBox->button(QDialogButtonBox::Ok)->show();}

UI文件

使用

DialogMessage my_msgDialog; //创建对象my_msgDialog.done(QDialog::Rejected); //关闭显示

my_msgDialog.set_messageText(MSG_INFO,"网络参数设置", "网络参数设置成功,请手动重启软件后参数生效");

my_msgDialog.set_cancelButtonHide();int ret = my_msgDialog.exec();if( ret == QDialog::Rejected) //点击取消按钮走这里{return;}

【领 QT开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】

点击这里:

标签:
x 广告
x 广告

Copyright ©  2015-2022 科普头条网版权所有  备案号:沪ICP备2022005074号-20   联系邮箱:58 55 97 3@qq.com