Qt基础:五、自定义对话框

9 篇文章 0 订阅

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,"网络参数设置", "网络参数设置成功,请手动重启软件后参数生效");
my_msgDialog.set_cancelButtonHide();
int ret = my_msgDialog.exec();
if( ret == QDialog::Rejected)   //点击取消按钮走这里
{
    return;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值