【QT】 Qt Dialog对话框

很高兴你能看到这篇文章,同时我的语雀文档也更新了许多嵌入式系列的学习笔记希望能帮到你 :
https://www.yuque.com/alive-m4b9n

QMessageBox 消息盒子

概念: 程序运行时希望给用户一些提示的时候可以使用消息盒子,比如登陆成功或失败弹出框提示。

静态方法

查询 QT 助手可以看到有官方提供以下静态方法可以直接使用

上面提供了四种不同严重程度,也就是图标 Icon 不同的静态方法

静态方法使用示例

int ret = QMessageBox::warning(this, tr("My Application"),
                                 tr("The document has been modified.\n"
                                    "Do you want to save your changes?"),
                                 QMessageBox::Save | QMessageBox::Discard
                                 | QMessageBox::Cancel,
                                 QMessageBox::Save);
if(ret == QMessageBox::Save)
{
    qDebug()<< "你点击了Save";
}else if(QMessageBox::Discard)
{
    ....
}

非静态方法

//构造函数 
QMessageBox(QWidget *parent = nullptr)

//添加按钮   
QPushButton * addButton(const QString &text, QMessageBox::ButtonRole role) 
void addButton(QAbstractButton *button, QMessageBox::ButtonRole role) 
//添加可选按钮  
void setCheckBox(QCheckBox *cb) 

//设置默认按钮 
void setDefaultButton(QPushButton *button)

QString informativeText() const 
void setInformativeText(const QString &text)  //设置小提示 

void setIcon(QMessageBox::Icon)  //设置默认 Icon 小图标 
    QMessageBox::Question
    QMessageBox::Information
    QMessageBox::Warning
    QMessageBox::Critical

void setIconPixmap(const QPixmap &pixmap)//设置 Icon 小图标图片 

QString text() const  //获取文本 
void setText(const QString &text) //设置文本 

//设置窗体的标题  
void setWindowTitle(const QString &title) 

//删除按钮    
void removeButton(QAbstractButton *button) 

使用示例

QT 系统自定义对话框

QFileDialog 文件对话框

QFileDialog类允许用户遍历文件系统以选择一个或多个文件或一个目录。创建 QFileDialog 的最简单方法是使用静态函数

静态函数👍👍

静态函数示例

//✅选择多个文件  返回多个文件路径的 QStringList
QStringList fileNames = QFileDialog::getOpenFileNames(this, "选择多个文件", 
                                                "C:/", 
                                                "图片文件 (*.png *.jpg *.bmp)");
for (const QString &file : fileNames) {
    qDebug() << "选择的文件:" << file;
}

//✅选择文件夹  用于选择文件夹,返回文件夹路径。
QString fileName = QFileDialog::getSaveFileName(this, "保存文件", "C:/untitled.txt"
                                            ,"文本文件 (*.txt);;所有文件 (*.*)");
if (!fileName.isEmpty()) {
    qDebug() << "保存的文件:" << fileName;
}

//✅保存文件 可以让用户选择文件,并保存(如果文件存在会提示覆盖)
QString fileName = QFileDialog::getSaveFileName(this, "保存文件",
                                                "C:/untitled.txt",
                                                "文本文件 (*.txt);;所有文件 (*.*)");
if (!fileName.isEmpty()) {
    qDebug() << "保存的文件:" << fileName;
}

QFontDialog 字体对话框

字体选择对话框,用于让用户选择字体、大小、样式等信息。

静态方法

静态方法示例


QFont 字体类: 
bool bold() const   //是否加粗
QString family() const //字体格式 
int pointSize() const //点大小 (字体大小)
void setBold(bool enable) //设置加粗状态 
void setPointSize(int pointSize)//设置点大小

设置控件的字体 
控件的地址->setfont(字体); 
//例子:修改标签的字体 
ui->label->setFont(font);  
//修改整个界面的字体
this->setFont(font);   

限制用户只能选择某些字体属性
QFontDialog::NoButtons	  //隐藏 "确定" 和 "取消" 按钮
QFontDialog::DontUseNativeDialog //不使用系统默认字体对话框(强制使用 Qt 样式)
QFontDialog::ScalableFonts	//只显示可缩放字体
QFontDialog::MonospacedFonts	//只显示等宽字体
 示例:
fontDialog.setOption(QFontDialog::NoButtons);
fontDialog.setOption(QFontDialog::DontUseNativeDialog);

QColorDialog 颜色窗体

颜色选择对话框,用于让用户选择颜色。

静态函数
QColor getColor(const QColor &initial = Qt::white, //默认选中颜色
                QWidget *parent = nullptr, //父对象指针
                const QString &title = QString(), //标题
                QColorDialog::ColorDialogOptions options = ColorDialogOptions())
//第四个参数设置颜色对话框的颜色,一般默认即可,有以下枚举值
QColorDialog::ShowAlphaChannel	//显示透明度滑块
QColorDialog::NoButtons	        //隐藏 "确定" 和 "取消" 按钮
QColorDialog::DontUseNativeDialog	//不使用系统默认颜色对话框(强制使用 Qt 样式)

默认调用方法 
QColor  color =  QColorDialog::getColor(); //四个参数都有初始值所以不用传参也行
 
设置默认颜色与标题 
QColor  color =  QColorDialog::getColor(Qt::green,this,"我的颜色窗");

QColor 类

构造函数
QColor(int r, int g, int b, int a = ...) 
函数接口  
void getRgb(int *r, int *g, int *b, int *a = nullptr) const  //获取颜色值 

QString name() const //颜色名称

void setRgb(int r, int g, int b, int a = 255) //设置颜色值  

示例:

void MainWindow::on_pushButton_clicked()
{
    QColor  color =  QColorDialog::getColor(Qt::green,this,"颜色选择框");
    //方式一:
    // int r,g,b;
    // color.getRgb(&r,&g,&b);
    // 拼接实际rgb颜色到qss命令
    // QString Style = QString("color:rgb(%1,%2,%3);").arg(r).arg(g).arg(b);
    // ui->label->setStyleSheet(Style);

    //方式二
    if(color.isValid())//检测颜色是否有效,即用户按下确定
    {
        QString style = QString("background-color:%1").arg(color.name());
        ui->label->setStyleSheet(style);
    }
}

QInputDialog 输入窗体

输入对话框,用于让用户输入 文本、整数或浮点数

静态函数

示例

//获取整形
void MainWindow::on_pushButton_clicked()
{
    bool ok;
    int num = QInputDialog::getInt(this, "整数输入", "请输入年龄:", 
                                    18, 0, 100, 1, &ok);  
    if (ok) {
        qDebug() << "用户输入的年龄:" << num;
        ui->label->setText("你好, " + text);
    }
}

//让用户选择下拉框(ComboBox)
QStringList items = {"苹果", "香蕉", "橙子"};
bool ok;
QString choice = QInputDialog::getItem(this, "选择水果", "请选择一个水果:",
                                        items, 0, false, &ok);

if (ok && !choice.isEmpty()) {
    qDebug() << "用户选择:" << choice;
    ui->label->setText("用户选择, " + text);
}

QT 用户自定义对话框

在 UI Designer 中创建自定义对话框

然后修改 对话框的对象名防止名字冲突

创建出一个新的对话框,然后添加一些控件:

模态和非模态对话框

1️⃣ 模态对话框会 阻塞主窗口的操作,直到用户关闭该对话框后,程序才会继续执行。

  • 适用于 重要信息提示、用户确认(如 “保存更改”)等场景。

2️⃣ 非模态对话框不会阻塞主窗口,用户可以同时操作主窗口和对话框

  • 适用于 实时预览、工具窗口(如 “查找替换”)等场景。

创建模态对话框

MyDialog dialog(this);  // 创建对话框实例
int ret = dialog.exec();  // 以模态方式运行,阻塞主窗口

if (ret == QDialog::Accepted) {
    qDebug() << "用户点击了 '确定'";
} else {
    qDebug() << "用户点击了 '取消' 或 关闭了对话框";
}

自定义对话框的返回值

int ret = dialog->exec();
switch(ret)
{
    case QDialog::Accepted:
     qDebug()<<"Accepted";
        break;
    case QDialog::Rejected:
        qDebug()<<"Rejected";
        break;
}

创建非模态对话框

 myDialog *dialog = new myDialog(this);   // 创建对话框实例
    dialog->show();  // 以非模态方式运行,不阻塞主窗口

  • 由于 show() 只是显示窗口而不会阻塞,因此不能直接在 dialog 作用域结束后释放内存,否则对话框会立即被销毁。可以使用 new 动态分配内存,或者在类成员变量中定义该对话框。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值