第四章 Qt窗口

Qt 窗口 是通过 QMainWindow类 来实现的。

QMainWindow 是一个为用户提供主窗口程序的类,继承自 QWidget 类,并且提供了一个预定义的布局。QMainWindow 包含 一个菜单栏(menu bar)、多个工具栏(tool bars)、多个浮动窗口(铆接部件)(dock widgets)、一个状态栏(status bar) 和一个 中心部件(central widget),它是许多应用程序的基础,如文本编辑器,图片编辑器等。如下图为 QMainwindow 中 各组件所处的位置:

在这里插入图片描述

1. 菜单栏QMenuBar

Qt中的菜单栏是通过 QMenuBar 这个类来实现的。一个主窗口最多只有一个菜单栏。位于主窗口顶部、主窗口标题栏下面。

在这里插入图片描述

1.1 创建菜单栏

方式一:菜单栏的创建可以借助于 QMainWindow类 提供的 menuBar() 函数来实现。menubar()函数原型如下:

QMenuBar * menuBar() const
// 创建菜单栏
QMenuBar *menubar = menuBar();

// 将菜单栏放入窗口中
this->setMenuBar(menubar);

方式二:在堆上动态创建

QMenuBar *menubar = new QMenuBar(this);

// 将菜单栏放入窗口中
this->setMenuBar(menuBar);

1.2 在菜单栏中添加菜单

创建菜单,并通过 QMenu 提供的 addMenu() 函数 来添加菜单。

// 创建菜单栏
QMenuBar *menubar = menuBar();

// 将菜单栏放入窗口中
this->setMenuBar(menubar);

// 创建菜单
QMenu *menu1 = new QMenu("文件");
QMenu *menu2 = new QMenu("编辑");
QMenu *menu3 = new QMenu("构建");

// 添加菜单到菜单栏中
menubar->addMenu(menu1);
menubar->addMenu(menu2);
menubar->addMenu(menu3);

1.3 创建菜单项

在 Qt 中,并没有专门的菜单项类,可以通过 QAction 类,抽象出公共的动作。如在菜单中添加菜单项.

QAction 可以给菜单栏使用, 也可以给工具栏使用.

// 创建菜单项
QAction *act1 = new QAction("open");
QAction *act2 = new QAction("close");
QAction *act3 = new QAction("create");

// 将菜单项添加到菜单上
menu1->addAction(act1);
menu2->addAction(act2);
menu3->addAction(act3);

1.4 在菜单项之间添加分割线

在菜单项之间可以添加分割线。分割线如下图所示,添加分割线是通过 QMenu 类 提供的 addSeparator() 函数来实现。

在这里插入图片描述

// 创建菜单项
QAction *act1 = new QAction("open");
QAction *act2 = new QAction("close");
QAction *act3 = new QAction("create");

// 将菜单项添加到菜单上
menu1->addAction(act1);
menu1->addSeparator(); // 在open和close之间添加分割线
menu2->addAction(act2);
menu3->addAction(act3);

1.5 综合示例

在窗口上创建一个菜单栏,在菜单栏中添加一些菜单,在某一个菜单中添加一些菜单项。

  1. 新建 Qt 项目

    注意:此时新建项目时选择的基类 QMainwindow ,如下图示:

    在这里插入图片描述

  2. 在 “mainwindow.cpp” 文件中创建菜单和中央控件

    • 创建一个菜单栏, 一个菜单.
    • 两个菜单项: 保存, 加载
    • 创建一个 QTextEdit 作为窗口的中央控件.
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        
        // 设置标题
        this->setWindowTitle("我的记事本");
        
        // 创建菜单栏
        QMenuBar* menuBar = new QMenuBar(this);
        this->setMenuBar(menuBar);
        
        // 创建菜单
        QMenu* menu = new QMenu("文件");
        menuBar->addMenu(menu);
        
        // 创建菜单项
        QAction* action1 = new QAction("保存");
        QAction* action2 = new QAction("加载");
        menu->addAction(action1);
        menu->addAction(action2);
        
        // 创建中央控件
        edit = new QTextEdit(this);
        this->setCentralWidget(edit);
        edit->setPlaceholderText("此处编写文本内容...");
    }
    
  3. 给 action 添加一些动作

    // 连接信号槽, 点击 action 时触发一定的效果.
    connect(action1, &QAction::triggered, this, &MainWindow::save);
    connect(action2, &QAction::triggered, this, &MainWindow::load);
    
    • 使用 QFileDialog 来实现选择文件的效果.

      • getSaveFileName 用于保存文件的场景. 此时的对话框可以输入文件名.
      • getOpenFileName 用于打开文件的场景. 此时的对话框可以获取到鼠标选择的文件名.
    • 搭配 C++ 标准库的文件操作实现文件读写.

      void MainWindow::save()
      {
          // 弹出对话框, 选择写入文件的路径
          QFileDialog* dialog = new QFileDialog(this);
          QString fileName = dialog->getSaveFileName(this, "保存文件", "C:/Users/1/");
          qDebug() << "fileName: " << fileName;
          // 写入文件
          std::ofstream file(fileName.toStdString().c_str());
          if (!file.is_open()) {
              qDebug() << "文件保存失败!";
              return;
      	}
          const QString& text = edit->toPlainText();
          file << text.toStdString();
          file.close();
      }
      
      void MainWindow::load()
      {
          // 弹出对话框, 选择打开的文件
          QFileDialog* dialog = new QFileDialog(this);
          QString fileName = dialog->getOpenFileName(this, "加载文件", "C:/Users/1/");
          qDebug() << "fileName: " << fileName;
          // 读取文件
          std::ifstream file(fileName.toStdString().c_str());
          if (!file.is_open()) {
              qDebug() << "文件加载失败!";
              return;
          }
          std::string content;
          std::string line;
          while (std::getline(file, line)) {
              content += line;
              content += "\n";
          }
          file.close();
          // 显示到界面上
          QString text = QString::fromStdString(content);
          edit->setPlainText(text);
      }
      
  4. 执行程序, 可以看到此时就可以通过程序来保存/加载文件了. 并且对文件进行编辑.

在这里插入图片描述

在这里插入图片描述

2. 工具栏

工具栏是应用程序中集成各种功能实现快捷键使用的一个区域。可以有多个,也可以没有,它并不是应用程序中必须存在的组件。它是一个可移动的组件,它的元素可以是各种窗口组件,它的元素通常以图标按钮的方式存在。

在这里插入图片描述

2.1 创建工具栏

调用 QMainWindow类 的 addToolBar() 函数来创建工具栏,每增加一个工具栏都需要调用一次该函数。

如添加两个工具栏:

QToolBar *toolBar1 = new QToolBar(this);
QToolBar *toolBar2 = new QToolBar(this);
this->addToolBar(toolBar1);
this->addToolBar(toolBar2);

2.2 设置停靠位置

工具栏停靠位置的设置有两种方式。一种是在创建工具栏的同时指定停靠的位置,另一种是通过 QToolBar类 提供的 setAllowedAreas()函数 来设置。

方式一:创建工具栏的同时指定其停靠的位置。

在创建工具栏的同时,也可以设置工具栏的位置,其默认位置是在窗口的最上面;如上述代码,默认在最上面显示。工具栏允许停靠的区域由 QToolBar类 提供的 allowAreas()函数 决定,其中可以设置的位置包括:

  • Qt::LeftToolBarArea 停靠在左侧
  • Qt::RightToolBarArea 停靠在右侧
  • Qt::TopToolBarArea 停靠在顶部
  • Qt::BottomToolBarArea 停靠在底部
  • Qt::AllToolBarAreas 以上四个位置都可停靠
QToolBar *toolBar1 = new QToolBar(this);
QToolBar *toolBar2 = new QToolBar(this);
// 创建工具栏时指定工具栏在左侧
this->addToolBar(Qt::LeftToolBarArea, toolBar1);
// 创建工具栏时指定工具栏在右侧
this->addToolBar(Qt::RightToolBarArea, toolBar2);

方式二:使用 QToolBar类 提供的 setAllowedAreas()函数 设置停靠位置。

QToolBar *toolBar1 = new QToolBar(this);
QToolBar *toolBar2 = new QToolBar(this);
this->addToolBar(toolBar1);
this->addToolBar(toolBar2);
// 只允许在左侧停靠
toolBar1->setAllowedAreas(Qt::LeftToolBarArea);
// 只允许在右侧停靠
toolBar2->setAllowedAreas(Qt::RightToolBarArea);

在创建工具栏的同时指定其停靠的位置,指的是程序运行时工具栏默认所在的位置;而使用 setAllowedAreas()函数设置停靠位置,指的是工具栏允许其所能停靠的位置。

2.3 设置浮动属性(是否可以脱离主窗口,成为独立窗口)

工具栏的浮动属性可以通过 QToolBar类 提供的 setFloatable()函数 来设置。setFloatable()函数原型为:

void setFloatable (bool floatable)

参数:

  • true:浮动
  • false:不浮动
QToolBar *toolBar1 = new QToolBar(this);
QToolBar *toolBar2 = new QToolBar(this);
this->addToolBar(Qt::LeftToolBarArea, toolBar1);
this->addToolBar(Qt::RightToolBarArea, toolBar2);
// 允许工具栏浮动
toolBar1->setFloatable(true);
// 不允许工具栏浮动
toolBar2->setFloatable(false);

2.4 设置移动属性(是否可以被移动重新停靠到主窗口的其他位置)

设置工具栏的移动属性可以通过 QToolBar类 提供的 setMovable()函数 来设置。setMovable()函数原型为:

void setMovable(bool movable)

参数:

  • true:允许
  • false:不允许

说明:若设置工具栏为不移动状态,则设置其停靠位置的操作就不会生效,所以设置工具栏
的移动属性类似于总开关的效果。

QToolBar *toolBar1 = new QToolBar(this);
QToolBar *toolBar2 = new QToolBar(this);
this->addToolBar(Qt::LeftToolBarArea, toolBar1);
this->addToolBar(Qt::RightToolBarArea, toolBar2);
// 允许工具栏移动
toolBar1->setMovable(true);
// 不允许工具栏移动
toolBar2->setMovable(false);

2.5 综合示例

这里在上面1.5的示例的MainWindow构造函数的基础上加上下面代码。

QToolBar *toolBar = new QToolBar(this);

// 设置工具栏的位置,默认是在窗口上方,为了看见效果,这里设置在右方
addToolBar(Qt::RightToolBarArea, toolBar);

// 设置工具栏的停靠位置,这里设置为只允许左右停靠
toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);

// 设置工具栏的浮动属性
toolBar->setFloatable(false);

// 设置工具栏的移动属性
toolBar->setMovable(false);

// 设置工具栏的内容
QAction *openAction = new QAction("open", this);
QAction *newAction = new QAction("new", this);

toolBar->addAction(openAction);
toolBar->addSeparator(); // 添加分隔符
toolBar->addAction(newAction);

// 工具栏也可以添加控件
QPushButton *btn = new QPushButton("保存", this);
toolBar->addWidget(btn);

在这里插入图片描述

3. 状态栏

状态栏是应用程序中输出简要信息的区域。一般位于主窗口的最底部,一个窗口中最多只能有一个状态栏。在 Qt 中,状态栏是通过 QStatusBar类 来实现的。 在状态栏中可以显示的消息类型有:

  • 实时消息:如当前程序状态
  • 永久消息:图程序版本号,机构名称
  • 进度消息:如进度条提示,百分比提示

3.1 状态栏的创建

状态栏的创建是通过 QMainWindow 类 提供的 statusBar() 函数来创建;示例如下:

// 创建状态栏
QstatusBar *stbar = statusBar;

// 将状态栏置于窗口中
setStatusBar(stbar);

3.2 在状态栏中显示实时消息

在状态栏中显示实时消息是通过 showMessage() 函数来实现,示例如下:

// 状态栏显示2秒的Hello_Qt
stbar->showMessage("Hello_Qt", 2000);

3.3 在状态栏中显示永久信息

在状态栏中可以显示永久消息,此处的永久消息是通过标签来显示的;示例如下:

QstatusBar *stbar = statusBar;
setStatusBar(stbar);

// 创建标签
QLabel *label = new QLabel("提示信息", this);

// 将标签放入状态栏中
stbar->addWidget(label);

在这里插入图片描述

调整显示消息的位置

QLabel *label2 = new QLabel("右侧提示信息", this);
stbar->addPermanentWidget(label);

在这里插入图片描述

4. 浮动窗口

在 Qt 中,浮动窗口也称之为铆接部件。浮动窗口是通过 QDockWidget类 来实现浮动的功能。浮动窗口一般是位于核心部件的周围,可以有多个。

4.1 浮动窗口的创建

浮动窗口的创建是通过 QDockWidget类 提供的构造方法 QDockWidget()函数 动态创建的;示例如下:

// 浮动窗口
QDockWidget *dockwidget = new QDockWidget("浮动窗口", this);

// 将浮动窗口置于当前窗口中
addDockWidget(Qt::BottomDockWidgetArea, dockwidget);

在这里插入图片描述

4.2 设置停靠的位置

浮动窗口是位于中心部件的周围。可以通过 QDockWidget类 中提供 setAllowedAreas() 函数设置其允许停靠的位置。其中可以设置允许停靠的位置有:

  • Qt::LeftDockWidgetArea 停靠在左侧
  • Qt::RightDockWidgetArea 停靠在右侧
  • Qt::TopDockWidgetArea 停靠在顶部
  • Qt::BottomDockWidgetArea 停靠在底部
  • Qt::AllDockWidgetAreas 以上四个位置都可停靠

示例如下:设置浮动窗口只允许上下停靠

// 设置浮动窗口的停靠区域,只允许上下停靠
dockwidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);

在这里插入图片描述

5. 对话框

5.1 对话框介绍

对话框是 GUI 程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。Qt常用的内置对话框有:QFiledialog(文件对话框)、QColorDialog(颜色对话框)、QFontDialog(字体对话框)、QInputDialog (输入对话框)和 QMessageBox(消息框) 。

5.2 对话框的分类

对话框分为 模态对话框 和 非模态对话框。

5.2.1 模态对话框

模态对话框指的是:显示后无法与父窗口进行交互,是一种阻塞式的对话框。使用 QDialog::exec() 函数 调用。

模态对话框适用于必须依赖用户选择的场合,比如消息显示,文件选择,打印设置等。

示例:

  1. 创建Qt项目,在ui文件中设置两个菜单:“文件” 和 “编辑”,在 菜单 “文件” 下新建菜单项:“创建” 并将菜单项 “新建” 置于工具栏中 ; 如下图示:

    在这里插入图片描述

  2. 在 mainwindow.cpp 文件中实现:当点击 “新建” 时,弹出一个模态对话框;

    // 当点击“新建”时,弹出一个模态对话框,在菜单项中,点击后就会触发triggered信号
    connect(ui->actionnew, &QAction::triggered, [=](){
    	QDialog dlg(this);
    	dlg.resize(200, 100);
    	dlg.exec();
    });
    
5.2.2 非模态对话框

非模态对话框显示后独立存在,可以同时与父窗口进行交互,是一种非阻塞式对话框,使用 QDialog::show()函数调用。

非模态对话框一般在堆上创建,这是因为如果创建在栈上时,弹出的非模态对话框就会一闪而过。同时还需要设置 Qt:WA_DeleteOnClose 属性,目的是:当创建多个非模态对话框时(如打开了多个非模态窗口),为了避免内存泄漏要设置此属性。

非模态对话框适用于特殊功能设置的场合,比如查找操作,属性设置等。

示例:

connect(ui->actionnew, &QAction::triggered, [=](){
	// 非模态对话框,为防止一闪而过,创建在堆区
	QDialog *dlg = new QDialog(this);
	dlg->resize(200, 100);
	// 设置关闭窗口即释放
	dlg->setAttribute(Qt::WA_DeleteOnClose);
	dlg->show();
});
5.2.3 混合属性对话框

混合属性对话框同时具有模态对话框和非模态对话框的属性,对话框的生成和销毁具有非模态对话框属性,功能上具有模态对话框的属性。

使用 QDialog::setModal() 函数 可以创建混合特性的对话框。通常,创建对话框时需要指定对话框的父组件。

示例:

connect(ui->actionnew, &QAction::triggered, [=](){
	QDialog *dialog = new QDialog(this);
	dialog->setModal(true);
	dialog->resize(200, 100);
	dialog->setAttribute(Qt::WA_DeleteOnClose);
	dialog->show();
});

5.3 Qt 内置对话框

Qt 提供了多种可复用的对话框类型,即 Qt 标准对话框。Qt 标准对话框全部继承于 QDialog类。常用标准对话框如下:

在这里插入图片描述

5.3.1 消息对话框 QMessageBox

消息对话框是应用程序中最常用的界面元素。消息对话框主要用于为用户提示重要信息,强制用户进行选择操作。

QMessageBox类 中定义了静态成员函数,可以直接调用创建不同风格的消息对话框,其中包括:

在这里插入图片描述

Question 用于正常操作过程中的提问
Information 用于报告正常运行信息
Warning 用于报告非关键错误
Critical 用于报告严重错误

其对应的函数原型如下:

在这里插入图片描述

示例1:问题提示消息对话框

resize(800, 600);

QPushButton *btn = new QPushButton("消息对话框", this);
QMessageBox *msg = new QMessageBox(this);

// 设置消息对话框的标题
msg->setWindowTitle("Warning Message");
// 设置消息对话框的内容
msg->setText("Error Message!");
// 设置消息对话框类型
msg->setIcon("QMessageBox::Question");
// 在消息对话框上设置的按钮
msg->setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);

connect(btn, &QPushButton::clicked, [=](){
	msg->show();
});

在这里插入图片描述

其中可以设置的按钮的类型如下:

在这里插入图片描述

更改消息对话框中的按钮类型:

resize(800, 600);

QPushButton *btn = new QPushButton("消息对话框", this);
QMessageBox *msg = new QMessageBox(this);

msg->setWindowTitle("Warning Message");
msg->setText("Error Message!");
msg->setIcon("QMessageBox::Question");
msg->setStandardButtons(QMessageBox::Open | QMessageBox::Close);

connect(btn, &QPushButton::clicked, [=](){
	msg->show();
});

在这里插入图片描述

示例2:信息提示消息对话框

resize(800, 600);

QPushButton *btn = new QPushButton("消息对话框", this);
QMessageBox *msg = new QMessageBox(this);

msg->setWindowTitle("Warning Message");
msg->setText("Error Message!");
msg->setIcon("QMessageBox::Information");
msg->setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);

connect(btn, &QPushButton::clicked, [=](){
	msg->show();
});

在这里插入图片描述

另外两种类型也是类似,这里不再一一演示。

5.3.2 颜色对话框 QColorDialog

颜色对话框的功能是允许用户选择颜色。继承自 QDialog 类。颜色对话框如下图示:

在这里插入图片描述

常用方法介绍:

方法 说明
QColorDialog (QWidget *parent = nullptr) 创建对象的同时设置父对象
QColorDialog(const QColor &initial, QWidget *parent = nullptr) 创建对象的同时通过QColor对象设置默认颜色和父对象
void setCurrentColor(const QColor &color) 设置当前颜色对话框
QColor currentColor() const 获取当前颜色对话框
QColor getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions()) 打开颜色选择对话框,并返回一个QColor对象
void open(QObject *receiver, const char *member) 打开颜色对话框

参数说明:

  • initial:设置默认颜色
  • parent:设置父对象
  • title:设置对话框标题
  • options:设置选项

示例1:

resize(800, 600);

QPushButton *btn = new QPushButton("颜色对话框", this);

// 创建颜色对话框
QColorDialog *cdlg = new QColorDialog(this);

connect(btn, &QPushButton::clicked, [=](){
	// 打开颜色对话框并设置默认颜色为红色
	QColor color = cdlg->getColor(QColor(255, 0, 0));
	qDebug() << "r = " << color.red();
	qDebug() << "g = " << color.green();
	qDebug() << "b = " << color.blue();
});

在这里插入图片描述

示例2:

resize(800, 600);

QPushButton *btn = new QPushButton("颜色对话框", this);
QColorDialog *cdlg = new QColorDialog(this);
connect(btn, &QPushButton::clicked, [=](){
	// 设置颜色对话框中的颜色
	cdlg->setCurrentColor(QColor(200, 100, 190));
	cdlg->open();
});

在这里插入图片描述

5.3.3 文件对话框 QFileDialog

文件对话框用于应用程序中需要打开一个外部文件或需要将当前内容存储到指定的外部文件。

常用方法介绍:

方法 说明
QString getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options()) 打开文件(一次只能打开一个文件)
QStringList getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options()) 打开多个文件(一次可以打开多个文件)
QString getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options()) 保存文件

参数说明:

  • parent:父指针
  • caption:对话框标题
  • dir:默认打开路径
  • filter:文件过滤器
  • selectedFilter:保存用户选择的过滤器
  • options:设置对话框的额外选项
    • 常用选项:
      • QFileDialog::DontUseNativeDialog:强制使用 Qt 自带对话框,而不是系统原生对话框。
      • QFileDialog::ReadOnly:对话框显示为只读,不允许创建文件。
      • QFileDialog::HideNameFilterDetails:隐藏过滤器细节。

示例1:打开文件

resize(800, 600);

QPushButton *btn = new QPushButton("文件", this);
QFileDialog *fdlg = new QFileDialog(this);
connect(btn, &QPushButton::clicked, [=](){
    // 设置文件对话框标题“文件”,默认保存路径“D:\czxyv\Desktop\picture”,只保留“*.jpg”文件。
    QString str = fdlg->getOpenFileName(this, "文件", "D:\\czxyv\\Desktop\\picture", "*.jpg");
    qDebug() << str;
});

在这里插入图片描述

示例2:保存文件

resize(800, 600);

QPushButton *btn = new QPushButton("文件", this);
QFileDialog *fdlg = new QFileDialog(this);
connect(btn, &QPushButton::clicked, [=](){
    // 设置文件对话框标题“文件”,默认打开路径“D:\czxyv\Desktop”,只保留“*.jpg”文件。
    QString str = fdlg->getSaveFileName(this, "文件", "D:\\czxyv\\Desktop", "*.jpg");
    qDebug() << str;
});
5.3.4 字体对话框 QFontDialog

Qt 中提供了预定义的字体对话框类 QFontDialog,用于提供选择字体的对话框部件。

常用方法:

// 打开字体对话框
QFont QFontDialog::getFont(bool *ok, const QFont &initial = QFont(), QWidget *parent = nullptr, const QString &title = QString(), QFontDialog::FontDialogOptions options = QFontDialog::FontDialogOptions())

参数解析

参数 作用 默认值
bool *ok 输出参数,返回用户是否点击“OK”。如果用户取消选择,则 *ok = false 必填,需要传入一个 bool 指针
const QFont &initial 对话框打开时默认显示的字体 QFont()(系统默认字体)
QWidget *parent 父窗口指针,用于对话框居中显示和内存管理 nullptr
const QString &title 对话框标题 空字符串,使用系统默认标题(通常是“Select Font”)
QFontDialog::FontDialogOptions options 对话框选项 默认值,无特殊选项

示例:

resize(800, 600);
QPushButton *btn = new QPushButton("字体", this);
connect(btn, &QPushButton::clicked, [=](){
	bool flag;
	QFont font = QFontDialog::getFont(&flag, QFont("华文行楷, 36"));
	// 将char*转换为QString的方法:/toUtf8().data()
	QDebug() << "字体:" << font.family().toUtf8().data();
	
	// 获取字号:pointSize()
	QDebug() << "字号:" << font.pointSize();
	
	// 判断字体是否加粗:bold()
	QDebug() << "是否加粗:" << font.bold();
	
	// 判断字体是否倾斜:italic()
	QDebug() << "是否倾斜:" << font.bold();
});

在这里插入图片描述

在这里插入图片描述

5.3.5 输入对话框

Qt 中提供了预定义的输入对话框类:QInputDialog,用于进行临时数据输入的场合。

常用方法介绍:

方法 说明
double 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()); 双精度浮点型输入数据对话框
int 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()); 整型输入数据对话框
QString 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(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone) ; 选择条目型输入数据框

参数说明:

  • parent:父亲
  • title:对话框标题
  • label:对话框标签
  • items:可供选择的条目

示例1:浮点型数据输入对话框

resize(800, 600);

QPushButton *btn = new QPushButton("输入框", this);
QInputDialog *idlg = new QInputDialog(this);
connect(btn, &QPushButton::clicked, [=](){
    double d = idlg->getDouble(this, "输入框", "浮点型");
    qDebug() << "d = " << d;
});

在这里插入图片描述

获取整型也是类似,这里不再演示。

示例2:打开选择条目对话框

resize(800, 600);

QPushButton *btn = new QPushButton("输入框", this);
QInputDialog *idlg = new QInputDialog(this);
connect(btn, &QPushButton::clicked, [=](){
	QStringList items;
	items << tr("Spring") << tr("Summer") << tr("Fall") << tr("Winter");
    double d = idlg->getItem(this, "输入框", "Item", items);
    qDebug() << "item = " << item.toUtf8().data();
});

在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐