Qt:20.对话框(对话框介绍、对话框的一些使用方法、对话框内存泄漏问题/释放对话框资源、代码方式创建自定义对话框、图形化界面创建自定义对话框、对话框的模态和非模态、对话框分类)

目录

1.对话框介绍:

2.对话框的一些使用方法:

3.对话框内存泄漏问题/释放对话框资源:

4.代码方式创建自定义对话框:

5.图形化界面创建自定义对话框:

6.对话框的模态和非模态:

7.对话框分类:

8.QMessageBox-消息对话框:

 9.为QMessageBox添加自定义按钮:

10.通过静态方法,一句话创建一个messageBox:

11.QColorDialog-颜色对话框: 

 12.QFileDialog-文件对话框:


1.对话框介绍:

  • 在 Qt 中,对话框(Dialog)用于与用户进行交互。
  • 对话框在应用程序中有多种用途,如显示消息、获取用户输入、进行设置等。
  • 它通常是一个顶层窗口,出现在程序最上面,用于实现短期的任务或者简洁的用户交互。
  • 通过QDialog类创建对话框。在创建项目时,选择基类为QDialog。

        

  • 一般情况下不会在创建项目时直接创建为对话框,而是在主窗口实现一个类,来继承对话框,从而使用。

2.对话框的一些使用方法:

  • 创建对话框对象:QDialog* dialog=new QDialog(this);
  • 弹出对话框:dialog->show();
  • 设置对话框属性:dialog->resize(400,300);单位是像素
  • 设置对话框的标题:dialog->setWindowTitle("这是对话框的标题");

3.对话框内存泄漏问题/释放对话框资源:

  • 如果使用new的方法创建对话框,每次创建的对话框都会被挂在对象树上。
  • 如果一个按钮实现了弹出对话框这个功能,我们一直点击按钮,就会一直创建新的对话框对象。这些对话框都被挂在对象树上,如果不人工干预进行释放,迟早会导致内存泄漏。
  • 我们需要将对话框的关闭按钮和delete释放对话框进行绑定。
  • 通过:dialog->setAttribute(Qt::WA_DeleteOnClose);这个方法,可以实现释放对话框资源的功能。

4.代码方式创建自定义对话框:

  • 要想对对话框进行自定义操作,比如添加控件等,就需要继承QDialog类。
  • 首先创建一个C++类

        

  • 填写类名,指定继承的父类。

        

  • 因为以下bug
  • 因为一些bug,我们需要手动在新建的头文件包含父类的头文件。

        

  • 如果要将自定义的对话框挂在对象树上,就需要修改一下自定义类型的构造函数的声明和定义。

        

  • 通过主窗口的一个按钮绑定一个槽函数,来弹出窗口。
void MainWindow::on_pushButton_clicked()
{
    dialog* dialog_1=new dialog(this);
    //设置对话框大小
    dialog_1->resize(400,300);
    //设置窗口标题
    dialog_1->setWindowTitle("这是窗口的标题");
    //弹出窗口
    dialog_1->show();
    //设置关闭按钮能释放对话框资源
    dialog_1->setAttribute(Qt::WA_DeleteOnClose);
}
  • 自定义窗口的样式。
dialog::dialog(QWidget* parent):QDialog(parent)
{
    //创建两个按钮
    QPushButton* button_1=new QPushButton("这是按钮1",this);
    QPushButton* button_2=new QPushButton("这是按钮2",this);

    //创建一个布局管理器
    QVBoxLayout* layout=new QVBoxLayout();
    this->setLayout(layout);

    //将两个按钮添加到布局管理器
    layout->addWidget(button_1);
    layout->addWidget(button_2);
}
  • 最终效果展示:

        

5.图形化界面创建自定义对话框:

  • 先创建一个如下文件:

        

        

        

  • 创建完成后,会自动生成三个文件。

        

  • 我们可以直接在ui界面进行编辑,自定义对话框类。
  • 此时通过dialog类创建的对象,会自动调用新的ui界面。

6.对话框的模态和非模态:

  •  modality属性,用于控制用户在对对话框操作时,是否可以操作父窗口。
  • 模态:用户在操作对话框时,不能操作父窗口,必须要完成决策关闭对话框之后,才能操作父窗口。
  • 非模态:用户在操作对话框时,可以操作父窗口。
  • 默认情况下,创建的对话框为非模态对话框,即能在弹出对话框后继续操作父窗口。
  • 如何将一个对话框改为模态对话框呢?只需将弹出时的show()方法,改为exec()方法即可。
  • 模态对话框还是尽量少用,会影响用户体验。

7.对话框分类:

  • QMessageBox-消息框:

    用于显示简单的消息、警告、错误和询问用户确认。
    提供几种标准按钮(如 OK、Cancel、Yes、No)。

  • QFileDialog-文件对话框:
    用于打开和保存文件。
    提供文件系统的浏览界面。

  • QColorDialog-颜色对话框:
    用于选择颜色。
    提供颜色选择器界面。

  • QFontDialog-字体对话框:

    用于选择字体。
    提供字体选择界面。

 

  • QFontDialog-字体对话框:
    用于选择字体。
    提供字体选择界面。

8.QMessageBox-消息对话框:

  • 向用户显示信息、警告、错误以及询问确认。
  • 通过QMessageBox类创建消息对话框对象。
  • setWindowTitle:设置对话框标题。
  • setIcon(QMessageBox::Warning):设置对话框的图标(如信息、警告、错误等)。
  • setText:设置对话框的主要文本内容。
  • setInformativeText:设置对话框的附加信息文本。
  • setDetailedText:设置对话框的详细信息文本,可以折叠展开。
  • setStandardButtons(QMessageBox::Ok):设置对话框的标准按钮(如 Yes、No、Ok、Cancel 等)。
  • setDefaultButton:设置默认按钮。
  • 消息对话框一般结合模态使用。
  • 释放消息对话框,可以使用setAttribute(Qt::WA_DeleteOnClose)。当使用模态时也可以直接delete。
void MainWindow::on_pushButton_clicked()
{
    QMessageBox* box=new QMessageBox();
    box->setWindowTitle("这是QMessageBox对话框");
    box->setIcon(QMessageBox::Warning);
    box->setText("原神,启动!!!");
    box->setStandardButtons(QMessageBox::Ok | QMessageBox::Save | QMessageBox::No);
    box->exec();
    delete box;
}

 9.为QMessageBox添加自定义按钮:

  • 首先通过QPushButton类创建pushButton对象:QPushButton* button=new QPushButton("按钮名称",messageBox);
  • 然后通过addButton(button,QMessageBox::AcceptrRole)方法,将自定义按钮添加到消息对话框。
  •  一般来说不常用自定义按钮,而是通过Qt提供的按钮,在exec关闭窗口返回一个值后,接收到返回值得知点击的是哪个按钮,再判断该怎么处理。
int ret=messageBox->exec();
if(ret==QMessageBox::Save){}
else if(ret==QMessageBox::Yes){}
else if(ret==QMessageBox::Ok){}

10.通过静态方法,一句话创建一个messageBox:

  • 以下方式创建的对话框,不需要手动释放。
static StandardButton warning/information/question/critical
(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton);
  • parent:对话框的父窗口。可以是 nullptr,表示没有父窗口。
  • title:对话框的标题。
  • text:对话框中显示的警告信息。
  • buttons:对话框中显示的按钮,默认值为 QMessageBox::Ok。可以是按钮的组合,使用 | 分隔多个按钮。
  • defaultButton:默认选中的按钮,默认值为 QMessageBox::NoButton。

  • 实例演示:
QMessageBox::warning(this,"这是warning对话框","这是弹窗信息",QMessageBox::Yes | QMessageBox::Ok);

11.QColorDialog-颜色对话框: 

static QColor getColor
(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = QColorDialog::ShowAlphaChannel);
  • initial:对话框初始显示的颜色,默认为白色 (Qt::white)。

  • parent:对话框的父窗口,可以是 nullptr,表示没有父窗口。

  • title:对话框的标题,默认为空字符串。

  • options:对话框的选项,可以是 QColorDialog::ColorDialogOptions 的组合,默认值为 QColorDialog::ShowAlphaChannel,表示显示 Alpha 通道(透明度)的选项。

  •  实例演示:
QColor color = QColorDialog::getColor(Qt::red, this, "选择颜色", QColorDialog::ShowAlphaChannel | QColorDialog::DontUseNativeDialog);

 12.QFileDialog-文件对话框:

  • 选择一个文件进行打开操作。
static QString getOpenFileName
(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = QFileDialog::Options());
  • 选择多个文件进行打开操作。
static QStringList getOpenFileNames
(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = QFileDialog::Options());
  • 选择一个文件进行保存操作。

static QString getSaveFileName
(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = QFileDialog::Options());
  • 选择一个目录。
static QString getExistingDirectory
(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), QFileDialog::Options options = ShowDirsOnly);
  • 静态函数,使用方法和上面的集中对话框类似。
  • 15
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

S+叮当猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值