Windows图形界面(GUI)-QT-C/C++ - QT 对话窗口

目录

模态对话框

非模态对话框

文件对话框

基本概念

静态函数

常见属性

颜色对话框

基本概念

静态函数

常见属性

字体对话框

基本概念

静态函数

常见属性

输入对话框

基本概念

静态函数

消息对话框

基本概念

静态函数


模态对话框

  • 模态对话框是指在打开后,用户必须与该对话框交互并关闭它,才能返回到主窗口或其他窗口进行操作。在模态对话框打开期间,主窗口和其他窗口都不可用。

  • 模态对话框通常用于需要用户立即处理的情况,如确认对话框、错误提示、设置窗口等。

  • 在 Qt 中,可以通过 QDialog 类实现模态对话框。你可以使用 exec() 方法来显示模态对话框。

cpp 复制代码
void MainWindow::on_pushButton_clicked()
{
    QDialog dlg(this);
    QPushButton* btn = new QPushButton("on_pushButton_clicked", &dlg);
    dlg.exec();
}

void MainWindow::on_pushButton_3_clicked()
{
    Dialog1 dlg(this);
    dlg.exec();
}

非模态对话框

  • 非模态对话框是指在打开后,用户可以自由地与主窗口或其他窗口交互,而不必首先关闭该对话框。

  • 非模态对话框适用于不需要立即处理的情况,如工具窗口、搜索窗口等。

  • 在 Qt 中,可以通过 QDialog 类实现非模态对话框。你可以使用 show() 方法来显示非模态对话框。

cpp 复制代码
void MainWindow::on_pushButton_2_clicked()
{
    QDialog* dlg = new QDialog(this);
    dlg->setAttribute(Qt::WA_DeleteOnClose);
    dlg->show();
}

void MainWindow::on_pushButton_4_clicked()
{
    Dialog2* dlg = new Dialog2(this);
    dlg->show();
}

文件对话框

基本概念

  • QFileDialog:一个用于选择文件或目录的对话框。

  • 静态函数:QFileDialog 提供了一些静态函数,可以快速创建和显示文件对话框。

  • 模式:文件对话框可以是模态的(阻塞父窗口)或非模态的(不阻塞父窗口)。

静态函数

  • getOpenFileName:选择一个文件进行打开。

  • getSaveFileName:选择一个文件进行保存。

  • getExistingDirectory:选择一个目录。

  • getOpenFileNames:选择多个文件进行打开。

常见属性

  • setWindowTitle:设置对话框的标题。

  • setDirectory:设置对话框的初始目录。

  • setNameFilter:设置文件过滤器。

  • setFileMode:设置文件模式(例如,选择单个文件、多个文件、目录等)。

  • setOption:设置对话框的选项(例如,显示隐藏文件、不解析符号链接等)。

  • getOpenFileName用于选择一个文件进行打开。

    • 函数原型

      cpp 复制代码
      QString QFileDialog::getOpenFileName(
          QWidget *parent = nullptr,
          const QString &caption = QString(),
          const QString &dir = QString(),
          const QString &filter = QString(),
          QString *selectedFilter = nullptr,
          Options options = Options()
      )
    • 参数说明

      • parent:父窗口,用于模态对话框的父窗口。

      • caption:对话框的标题。

      • dir:初始目录。

      • filter:文件过滤器,例如 "Images (*.png *.xpm *.jpg);;Text files (*.txt)"

      • selectedFilter:选中的过滤器。

      • options:对话框选项,例如 QFileDialog::ReadOnly

    • 示例代码

      cpp 复制代码
      void MainWindow::on_pushButton_5_clicked()
      {
          QString fileName = QFileDialog::getOpenFileName(
              this,
              "Open File",
              "D:\\Debug",
              "Image(*.bmp *.png);;text(*.txt);;allfiles(*.*)",
              NULL,
              QFileDialog::ReadOnly);
      
          qDebug() << fileName;
      }
  • getSaveFileName用于选择一个文件进行保存。

    • 函数原型

      cpp 复制代码
      QString QFileDialog::getSaveFileName(
          QWidget *parent = nullptr,
          const QString &caption = QString(),
          const QString &dir = QString(),
          const QString &filter = QString(),
          QString *selectedFilter = nullptr,
          Options options = Options()
      )
    • 参数说明

      • parent:父窗口,用于模态对话框的父窗口。

      • caption:对话框的标题。

      • dir:初始目录。

      • filter:文件过滤器,例如 "Images (*.png *.xpm *.jpg);;Text files (*.txt)"

      • selectedFilter:选中的过滤器。

      • options:对话框选项,例如 QFileDialog::ReadOnly

    • 示例代码

cpp 复制代码
void MainWindow::on_pushButton_7_clicked()
{
    QString fileName = QFileDialog::getSaveFileName(
        this,
        "Save File",
        "D:\\Debug",
        "Image(*.bmp *.png);;text(*.txt);;allfiles(*.*)",
        NULL,
        QFileDialog::ReadOnly);

    qDebug() << fileName;
}
  • getExistingDirectory用于选择一个目录。

    • 函数原型

      cpp 复制代码
      QString QFileDialog::getExistingDirectory(
          QWidget *parent = nullptr,
          const QString &caption = QString(),
          const QString &dir = QString(),
          Options options = ShowDirsOnly
      )
    • 参数说明

      • parent:父窗口,用于模态对话框的父窗口。

      • caption:对话框的标题。

      • dir:初始目录。

      • options:对话框选项,例如 QFileDialog::ShowDirsOnly

    • 示例代码

cpp 复制代码
void MainWindow::on_pushButton_8_clicked()
{
    QString dir = QFileDialog::getExistingDirectory(
        this,
        "Open Directory",
        "D:\\Debug",
        QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
    qDebug() << dir;
}
  • getOpenFileNames用于选择多个文件进行打开。

    • 函数原型

      cpp 复制代码
      QStringList QFileDialog::getOpenFileNames(
          QWidget *parent = nullptr,
          const QString &caption = QString(),
          const QString &dir = QString(),
          const QString &filter = QString(),
          QString *selectedFilter = nullptr,
          Options options = Options()
      )
    • 参数说明

      • parent:父窗口,用于模态对话框的父窗口。

      • caption:对话框的标题。

      • dir:初始目录。

      • filter:文件过滤器,例如 "Images (*.png *.xpm *.jpg);;Text files (*.txt)"

      • selectedFilter:选中的过滤器。

      • options:对话框选项,例如 QFileDialog::ReadOnly

    • 示例代码

cpp 复制代码
void MainWindow::on_pushButton_6_clicked()
{
    QStringList fileName = QFileDialog::getOpenFileNames(
        this,
        "Open Files",
        "D:\\Debug",
        "Image(*.bmp *.png);;text(*.txt);;allfiles(*.*)",
        NULL,
        QFileDialog::ReadOnly);

    qDebug() << fileName;
}

颜色对话框

基本概念

  • QColorDialog:一个用于选择颜色的对话框。

  • 静态函数:QColorDialog 提供了一些静态函数,可以快速创建和显示颜色对话框。

  • 模式:颜色对话框可以是模态的(阻塞父窗口)或非模态的(不阻塞父窗口)。

静态函数

  • getColor:选择一个颜色。

常见属性

  • setWindowTitle:设置对话框的标题。

  • setCurrentColor:设置初始颜色。

  • currentColor:获取当前选中的颜色。

  • getColor 函数获取颜色

    • 函数原型

      cpp 复制代码
      QColor QColorDialog::getColor(
          const QColor &initial = Qt::white,
          QWidget *parent = nullptr,
          const QString &title = QString(),
          ColorDialogOptions options = ColorDialogOptions()
      )
    • 参数说明

      • initial:初始颜色。默认为 Qt::white

      • parent:父窗口,用于模态对话框的父窗口。

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

      • options:对话框选项。可以是 QColorDialog::ShowAlphaChannel 或其他选项的组合。

    • 示例代码

cpp 复制代码
void MainWindow::on_pushButton_9_clicked()
{
    QColor color = QColorDialog::getColor(Qt::white, this, "Select Color");
    if(color.isValid())
    {
        ui->pushButton_9->setStyleSheet("color:" + color.name() + ";");
        qDebug() << color.name();
    }

}

字体对话框

基本概念

  • QFontDialog:一个用于选择字体的对话框。

  • 静态函数:QFontDialog 提供了一些静态函数,可以快速创建和显示字体对话框。

  • 模式:字体对话框可以是模态的(阻塞父窗口)或非模态的(不阻塞父窗口)。

静态函数

  • getFont:选择一个字体。

常见属性

  • setWindowTitle:设置对话框的标题。

  • setCurrentFont:设置初始字体。

  • currentFont:获取当前选中的字体。

  • getFont:选择一个字体。

    • 函数原型

      cpp 复制代码
      QFont QFontDialog::getFont(
          bool *ok,
          const QFont &initial = QFont(),
          QWidget *parent = nullptr,
          const QString &title = QString(),
          FontDialogOptions options = FontDialogOptions()
      )
    • 参数说明

      • ok:一个布尔指针,用于指示用户是否确认了选择。如果用户确认了选择,*ok 将被设置为 true,否则为 false

      • initial:初始字体。默认为空字体(QFont())。

      • parent:父窗口,用于模态对话框的父窗口。

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

      • options:对话框选项。可以是 QFontDialog::NoButtons 或其他选项的组合。

    • 示例代码

cpp 复制代码
void MainWindow::on_pushButton_10_clicked()
{
    bool ok;
    QFont font = QFontDialog::getFont(
        &ok,
        QFont("Helvetica [Cronyx]", 10),
        this,
        "Select Font");
    if(ok)
    {
        ui->pushButton_10->setFont(font);
        qDebug() << font.family();
    }

}

输入对话框

基本概念

  • QInputDialog:一个用于获取用户输入的对话框。

  • 输入类型:可以输入的类型包括字符串(text)、整数(int)、浮点数(double)等。

静态函数

  • getText:获取字符串输入。

  • 函数原型

    cpp 复制代码
    QString QInputDialog::getText(
        QWidget *parent, 
        const QString &title, 
        const QString &label, 
        QLineEdit::EchoMode mode = QLineEdit::Normal, 
        const QString &text = QString(), 
        bool *ok = nullptr,
        Qt::WindowFlags flags = Qt::WindowFlags()
    )
  • 参数说明

    • parent:父窗口指针,用于模态对话框的父窗口。

    • title:对话框的标题。

    • label:对话框中显示的标签文本。

    • mode :输入框的回显模式,例如普通模式(QLineEdit::Normal)或密码模式(QLineEdit::Password)。

    • text:输入框的初始文本。

    • ok :布尔指针,用于指示用户是否确认了输入。如果用户确认了输入,*ok 将被设置为 true,否则为 false

    • flags:窗口标志,用于设置对话框的外观和行为。

  • getInt:获取整数输入。

cpp 复制代码
int QInputDialog::getInt(
    QWidget *parent, 
    const QString &title, 
    const QString &label, 
    int value = 0, 
    int min = -2147483647, 
    int max = 2147483647, 
    int step = 1, 
    bool *ok = nullptr, 
    Qt::WindowFlags flags = Qt::WindowFlags()
)
  • 参数说明

    • parent:父窗口指针,用于模态对话框的父窗口。

    • title:对话框的标题。

    • label:对话框中显示的标签文本。

    • value:输入框的初始值。

    • min:输入的最小值。

    • max:输入的最大值。

    • step:输入框的步长。

    • ok :布尔指针,用于指示用户是否确认了输入。如果用户确认了输入,*ok 将被设置为 true,否则为 false

    • flags:窗口标志,用于设置对话框的外观和行为。

  • getDouble:获取浮点数输入。

    • 函数原型

      cpp 复制代码
      double QInputDialog::getDouble(
          QWidget *parent, 
          const QString &title, 
          const QString &label, 
          double value = 0, 
          double min = -2147483647, 
          double max = 2147483647, 
          int decimals = 1, 
          bool *ok = nullptr, 
          Qt::WindowFlags flags = Qt::WindowFlags()
      )
    • 参数说明

      • parent:父窗口指针,用于模态对话框的父窗口。

      • title:对话框的标题。

      • label:对话框中显示的标签文本。

      • value:输入框的初始值。

      • min:输入的最小值。

      • max:输入的最大值。

      • decimals:输入框的小数位数。

      • ok :布尔指针,用于指示用户是否确认了输入。如果用户确认了输入,*ok 将被设置为 true,否则为 false

      • flags:窗口标志,用于设置对话框的外观和行为。

    • getItem:从一个项目列表中获取选择。

      • 函数原型

        cpp 复制代码
        QString QInputDialog::getItem(
        QWidget *parent, 
        const QString &title, 
        const QString &label, 
        const QStringList &items, 
        int current = 0, 
        bool editable = true, 
        bool *ok = nullptr, 
        Qt::WindowFlags flags = Qt::WindowFlags()
        )
      • 参数说明

        • parent:父窗口指针,用于模态对话框的父窗口。

        • title:对话框的标题。

        • label:对话框中显示的标签文本。

        • items:项目列表,用户可以从中选择。

        • current:初始选中的项目索引。

        • editable:是否允许用户输入自定义文本。

        • ok :布尔指针,用于指示用户是否确认了输入。如果用户确认了输入,*ok 将被设置为 true,否则为 false

        • flags:窗口标志,用于设置对话框的外观和行为。

      • 示例代码

      cpp 复制代码
      void MainWindow::on_pushButton_11_clicked()
      {
          bool ok;
          QString text = QInputDialog::getText(
              this,
              "input dialog",
              "please input your name:",
              QLineEdit::Normal,
              "0xCC",
              &ok );
          if(ok && !text.isEmpty())
          {
              qDebug() << text;
          }
      
      }
      
      
      void MainWindow::on_pushButton_12_clicked()
      {
          bool ok;
          int value = QInputDialog::getInt(
              this,
              "input dialog",
              "please input your age:",
              18,
              0,
              120,
              1,
              &ok);
      
          if(ok) qDebug() << value;
      }
      
      
      void MainWindow::on_pushButton_13_clicked()
      {
          bool ok;
          QStringList items;
          items << "apple" << "banana";
          QString item = QInputDialog::getItem(
              this,
              "input dialog",
              "please select a fruit",
              items,
              1,
              false,
              &ok);
          if(ok) qDebug() << item;
      }

消息对话框

基本概念

  • QMessageBox:一个用于显示消息的对话框。

  • 消息类型:包括信息(Information)、警告(Warning)、错误(Critical)、询问(Question)等。

静态函数

  • information:显示信息消息。

  • 函数原型

    cpp 复制代码
    int QMessageBox::information(
        QWidget *parent, 
        const QString &title, 
        const QString &text, 
        int button0, 
        int button1 = 0, 
        int button2 = 0
    )
  • warning:显示警告消息。

  • 函数原型

    cpp 复制代码
    int QMessageBox::warning(
    QWidget *parent, 
    const QString &title, 
    const QString &text, 
    int button0, 
    int button1 = 0, 
    int button2 = 0
    )
  • critical:显示错误消息。

  • 函数原型

    cpp 复制代码
    int QMessageBox::critical(
    QWidget *parent, 
    const QString &title, 
    const QString &text, 
    int button0, 
    int button1 = 0, 
    int button2 = 0
    )
  • question:显示询问消息。

  • 函数原型

    cpp 复制代码
    int QMessageBox::question(
    QWidget *parent, 
    const QString &title, 
    const QString &text, 
    int button0, 
    int button1 = 0, 
    int button2 = 0
    )
  • 参数说明

    • parent :父窗口指针,用于模态对话框的父窗口,可以是 nullptr 表示没有父窗口。

    • title:对话框的标题。

    • text:对话框中显示的主要消息文本。

    • button0 :对话框中的第一个按钮,使用 QMessageBox::StandardButton 枚举值。

    • button1 :对话框中的第二个按钮(可选),使用 QMessageBox::StandardButton 枚举值。

    • button2 :对话框中的第三个按钮(可选),使用 QMessageBox::StandardButton 枚举值。

  • 示例代码

    cpp 复制代码
    void MainWindow::on_pushButton_14_clicked()
    {
        QMessageBox::information(this, "information", "This is a information message", QMessageBox::Ok);
    }
    
    void MainWindow::on_pushButton_15_clicked()
    {
        QMessageBox::warning(this, "warning", "This is a warning message");
    }
    
    void MainWindow::on_pushButton_16_clicked()
    {
        QMessageBox::critical(this, "critical", "This is a critical message");
    }
    
    void MainWindow::on_pushButton_17_clicked()
    {
        int ret = QMessageBox::question(this, "question", "Are you want to continue?");
        if(ret == QMessageBox::Yes)
        {
             QMessageBox::information(this, "information", "your chose yes");
        }
        else
        {
            QMessageBox::information(this, "information", "your chose no");
        }
    }
相关推荐
隼玉13 分钟前
【STM32-学习笔记-11-】RTC实时时钟
c语言·笔记·stm32·学习
代码驿站52018 分钟前
Java语言的数据结构
开发语言·后端·golang
生活很暖很治愈27 分钟前
从玩具到工业控制--51单片机的跨界传奇【3】
c语言·嵌入式硬件·51单片机
银氨溶液27 分钟前
RabbitMQ实现延迟消息发送——实战篇
java·spring boot·分布式·后端·职场和发展·rabbitmq·延迟消息
Xiao Xiangζั͡ޓއއ33 分钟前
于灵动的变量变幻间:函数与计算逻辑的浪漫交织(上)
c语言·开发语言·程序人生·学习方法·改行学it
6KE论坛-人皇1 小时前
wordpress zibll 2025款新页脚-6ke论坛
开发语言·前端·javascript
可涵不会debug1 小时前
Git在码云上的使用指南:从安装到推送远程仓库
linux·运维·服务器·c++·git
神探阿航1 小时前
基于 Spring Boot 和 Vue.js 的全栈购物平台开发实践
java·vue.js·spring boot·后端
知识分享小能手1 小时前
Java学习教程,从入门到精通,JDBC数据库连接语法知识点及案例代码(92)
java·大数据·开发语言·数据库·学习·java开发·java后端开发
上海拔俗网络1 小时前
“AI智能防控识别系统:守护安全的“智慧卫士”
java·团队开发