Qt 自定义提示框

新建 msgbox.h 文件,代码如下

#ifndef MSGBOX_H
#define MSGBOX_H

#include <QPushButton>
#include <QLabel>
#include <QMouseEvent>
#include<QDialog>
#include<QTimer>
#include<QDebug>
#include <windows.h>
#include <QWidget>
class MsgBox : public QDialog
{
    Q_OBJECT
public:
    MsgBox(int style,QString text,QWidget *parent = 0);
    ~MsgBox();
public:
    QPushButton *okBtn;
    QPushButton *cancleBtn;
    QPushButton *closeBtn;
    QPushButton * msgBtn;
    QLabel * titleLabel;
    QLabel *askLabel;

protected:
    QPoint move_point;                                    //移动的距离
    bool mouse_press;                                    //鼠标按下
    void mousePressEvent(QMouseEvent *qevent);            //鼠标按下事件
    void mouseReleaseEvent(QMouseEvent *qevent);         //鼠标释放事件
    void mouseMoveEvent(QMouseEvent *qevent);             //鼠标移动事件

public slots:
    void okBtn_press();
    void cancleBtn_press();
    void closeBtn_press();
    void closeWin();
};
#endif // MSGBOX_H

创建msgbox.cpp 文件,代码如下

#include "msgbox.h"

MsgBox::MsgBox(int style, QString text, QWidget *parent):QDialog(parent)
{
    this->resize(332,167);
  //获取主界面的宽度
    int width = this->width();
    int height = this->height();
    setStyleSheet("QWidget{background-color: rgb(219,229,245);}");
  //初始化为未按下鼠标左键

  //设置标题栏隐藏
    this->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);
    titleLabel = new QLabel(this);
    titleLabel->setGeometry(0,0,width,30);
    if(style==1)
        titleLabel->setText(QStringLiteral("  警告  "));
    else
        titleLabel->setText(QStringLiteral("  提示  "));
    titleLabel->setStyleSheet("QLabel{font-family :微软雅黑;font-size : 5em;color : rgb(255,255,255);background-color: rgb(139,159,185); border-radius:0px;}");

    closeBtn = new QPushButton(this);
    closeBtn->setGeometry(width-30, 6, 20, 20);
    closeBtn->setStyleSheet("QPushButton{image:url(:/images/images/close.png);background: transparent;border:none;}QPushButton:hover{image:url(:/images/images/closeHover.png);background: transparent;border:none;}");

    msgBtn = new QPushButton(this);
    msgBtn->setGeometry(25,56,44,44);
    if(style == 1)      //警告
        msgBtn->setStyleSheet("QPushButton{image:url(:/images/images/warning.png);background: transparent;border:none;}");
    else if(style == 2)  //提示
        msgBtn->setStyleSheet("QPushButton{image:url(:/images/images/information.png);background: transparent;border:none;}");
    else if(style == 3)  //询问
        msgBtn->setStyleSheet("QPushButton{image:url(:/images/images/question.png);background: transparent;border:none;}");
    else if(style == 4)  //错误
        msgBtn->setStyleSheet("QPushButton{image:url(:/images/images/error.png);background: transparent;border:none;}");

    askLabel = new QLabel(this);
    askLabel->setGeometry(95,52,width,50);
    askLabel->setText(text);
    askLabel->setStyleSheet("QLabel{font-family :微软雅黑;font-size:20px;}");

    okBtn=new QPushButton(this);
    if(style==3)
        okBtn->setGeometry(90,119,85,30);
    else
        okBtn->setGeometry(135,119,85,30);

    okBtn->setText(QStringLiteral("确定"));
    okBtn->setStyleSheet("QPushButton{border:1px groove gray;border-radius:4px;border-color: rgb(139,159,185);}QPushButton:hover{border-radius:4px;background-color: rgb(119,146,183);}QPushButton:pressed{border-radius:4px;background-color: rgb(139,159,185);}");

    cancleBtn=new QPushButton(this);
    cancleBtn->setGeometry(187,119,85,30);
    cancleBtn->setText(QStringLiteral("取消"));
    cancleBtn->setStyleSheet("QPushButton{border:1px groove gray;border-radius:4px;border-color: rgb(139,159,185);}QPushButton:hover{border-radius:4px;background-color: rgb(119,146,183);}QPushButton:pressed{border-radius:4px;background-color: rgb(139,159,185);}");
    if(style == 3)
        cancleBtn->show();
    else
        cancleBtn->hide();

    connect(okBtn,SIGNAL(clicked()),this,SLOT(okBtn_press()));
    connect(closeBtn,SIGNAL(clicked()),this,SLOT(closeBtn_press()));
    connect(cancleBtn,SIGNAL(clicked()),this,SLOT(cancleBtn_press()));

}
MsgBox::~MsgBox()
{
    delete okBtn;
    delete cancleBtn;
    delete closeBtn;
    delete msgBtn;
    delete titleLabel;
    delete askLabel;
}

void MsgBox::mousePressEvent(QMouseEvent *qevent)
{
    if(qevent->button() == Qt::LeftButton)
    {
        mouse_press = true;
        //鼠标相对于窗体的位置(或者使用event->globalPos() - this->pos())
        move_point = qevent->pos();;
    }
}
void MsgBox::mouseMoveEvent(QMouseEvent *qevent)
{
    //若鼠标左键被按下
    if(mouse_press)
    {
        //鼠标相对于屏幕的位置
        QPoint move_pos = qevent->globalPos();
        //移动主窗体位置
        this->move(move_pos - move_point);
    }
}
void MsgBox::mouseReleaseEvent(QMouseEvent *qevent)
{
    //设置鼠标为未被按下
    mouse_press = false;
}

void MsgBox::okBtn_press()
{
    this->accept();
}
void MsgBox::cancleBtn_press()
{
    this->reject();
}
void MsgBox::closeBtn_press()
{
    close();
}

调用举例:

//退出提示框
    if(m_msgBox){
        delete m_msgBox;
    }
    m_msgBox=new MsgBox(3,QStringLiteral("正在试图结束程序"),this);
    if(m_msgBox->exec()==0)
    {
        event->ignore();
        return;
    }
// 警告框
    if(m_msgBox){
         delete m_msgBox;
     }
     m_msgBox=new MsgBox(1,QStringLiteral("请选择固件文件"),this);
     m_msgBox->exec();

在这里插入图片描述
在这里插入图片描述

图标资源:

链接:https://pan.baidu.com/s/1BIaY5k394nxavn9BRfWLUQ
提取码:mlfg

### 回答1: Qt自定义消息提示框是指开发者可以根据自己的需求设计出符合自己应用程序风格的消息提示框,从而提高应用程序的用户体验。可以使用Qt的QWidget或QDialog等控件来实现消息的展示和弹出。一般而言,自定义消息提示框通常包括标题、消息内容和按钮,通过控制按钮的显示和响应来实现交互。同时,还需要考虑消息提示框的美观和易读性,比如可以选择一些颜色和图标来增强视觉效果,并且还需要支持多语言,方便不同国家和地区的用户使用。另外,为了方便使用,还可以将自定义消息提示框封装成一个函数或类,供应用程序中其他地方调用。总之,Qt自定义消息提示框的使用可以大大提升应用程序的用户体验,增强用户的满意度和忠诚度。 ### 回答2: QT框架提供了一个简便实用的方法来实现自定义消息提示框。首先,我们可以创建一个继承自QWidget类的消息提示框,这个类可以包含我们自定义的消息显示区域、确定按钮和取消按钮等控件。接下来,我们可以通过使用QHBoxLayout或QVBoxLayout等布局管理器来设置这些控件的位置和大小,使得它们在提示框中排版合理。同时,在确定按钮和取消按钮的点击事件中,我们可以使用accept()和reject()函数来确认或取消消息提示框的显示。 值得注意的是,在消息提示框的显示过程中,我们可以使用QPropertyAnimation等动画效果来增加提示框显示时的平滑感。另外,为了使得消息提示框更加美观,我们也可以在其样式表中设置背景、边框等相关样式。最终,我们可以通过调用自定义消息提示框类的实例来显示我们自己设计的消息提示框,在用户点击确定或取消按钮后,根据其结果来进行相应的操作。 综上所述,通过继承QWidget类并使用布局管理器、动画效果和样式表等技巧,我们可以实现自定义的消息提示框,并在QT应用程序中使用它来提供更好的用户体验。 ### 回答3: QT是一款非常强大的跨平台图形用户界面库,开发者可以使用QT框架创建丰富功能的图形化应用程序。其中,消息提示框是在应用程序中非常常用的一种控件,使用者可以在提示框中显示各种类型的消息,比如警告、错误和信息等等。本文将介绍如何使用QT自定义消息提示框。 首先,我们需要创建一个新窗口,用于显示自定义消息提示框。然后,我们可以在窗口中添加各种控件,比如QLabel、QPushButton和QMessageBox等控件。控件的颜色、大小和位置等属性可以按照自己的设计来设置。 接下来,我们需要添加一些功能,比如设置提示框的标题、消息内容和图标等。在处理这些功能时,我们可以使用QT提供的信号和槽机制。比如,在点击按钮时,我们可以发出一个信号,然后使用槽函数来处理信号并显示消息内容。 最后,我们需要将自定义的消息提示框集成到我们的应用程序中。这可以通过调用消息框的show函数来实现。如果我们希望用户能够在不关闭提示框的情况下执行其他操作,我们可以调用消息框的exec函数。 总之,使用QT自定义消息提示框是非常简单的,只需要创建一个新窗口并添加所需的控件和功能即可。同时,QT也提供了丰富的文档和示例,可以帮助我们更好地理解和使用自定义消息提示框
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值