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 <QDialog>
typedef enum
{
MSG_INFO = 0,
MSG_WARNING,
MSG_ERROR,
} E_MSG_TYPE;
namespace Ui {
class DialogMessage;
}
class DialogMessage : public QDialog
{
Q_OBJECT
public:
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 <QPushButton>
#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);
#else
this->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,"\n");
}
if(context.size()>=22)
{
context.insert(21,"\n");
}
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,"网络参数设置", "网络参数设置成功,请手动重启软件后参数生效");文章来源:https://www.toymoban.com/news/detail-676711.html
my_msgDialog.set_cancelButtonHide();
int ret = my_msgDialog.exec();
if( ret == QDialog::Rejected) //点击取消按钮走这里
{
return;
}
进群领取qt开发学习资料以及技术交流 在下方↓↓↓↓↓↓↓↓文章来源地址https://www.toymoban.com/news/detail-676711.html
到了这里,关于Qt开发:自定义对话框的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!