Qt第六章对话框

news/2024/12/22 23:10:00/

第六章QDialog(Layouts)

文章目录

  • 第六章QDialog(Layouts)
  • QDialogButtonBox
  • QMessageBox
  • QFileDialog
  • QFontDialog
  • QColorDialog
  • QInpuDialog
  • QProgressDialog
  • QErrorMessage

  • 模态对话框:在弹出对话框时,除了该对话框整个应用程序窗口都无法接受用户响应,处于等待状态,直到对话框关闭
  • 非模态对话框:又叫无模式对话框,即弹出非模态对话框时,用户仍然可以对其他窗口进行操作
  • 半模态对话框:介于模态和非模态之间,会阻塞窗口的响应,但不影响后续代码的执行
#include <QDialog>QDialog dialog;// dialog.exec(); // 模态显示// dialog.show(); // 非模态显示dialog.open(); // 半模态显示qDebug() << "dialog";

QDialogButtonBox

#include <QDialogButtonBox>
#include <QPushButton>auto dialogbox = new QDialogButtonBox; // 如果不添加对象,show不显示窗口dialogbox->addButton(QDialogButtonBox::Ok);dialogbox->addButton("取消", QDialogButtonBox::RejectRole);dialogbox->addButton(new QPushButton("保存"), QDialogButtonBox::AcceptRole);dialogbox->setOrientation(Qt::Vertical); // 按钮修改为垂直排列(默认是水平排列的)QObject::connect(dialogbox, &QDialogButtonBox::accepted, [=] {qInfo() << "接受";dialogbox->close(); }); // 点击ok和保存都会触发接受,因为都是AcceptRoleQObject::connect(dialogbox, &QDialogButtonBox::rejected, [] { qInfo() << "拒绝"; });//设置窗口关闭时自动释放对象dialogbox->setAttribute(Qt::WA_DeleteOnClose); // 使用这个属性,对象必须是堆区自己new的,否则会引发中断dialogbox->show();

QMessageBox

#include <QMessageBox>QMessageBox* msgBox = new QMessageBox;msgBox->setText("今天天气不错");msgBox->setIcon(QMessageBox::Warning); // 显示一个系统图标msgBox->exec(); // 模态对话框,这个点了之后才能执行后面的// 上面的功能也可以通过静态函数做到QMessageBox::about(nullptr, "静态", "今天天气不错"); // 效果如上,都是模态的QMessageBox::aboutQt(nullptr); // 显示一个Qt的说明对话框QMessageBox::information(nullptr, "模态", "又是一个好天气"); // 返回一个QMessageBox::StandardButtonauto sBtn = QMessageBox::information(nullptr, "sbtn", "standard", QMessageBox::Cancel, QMessageBox::Yes);if (sBtn == QMessageBox::Cancel)qInfo() << "取消"; // 点击cancel就会触发这个信号elseqInfo() << "继续";QMessageBox::critical(nullptr, "", "好天气+1"); // 错误对话框QMessageBox::warning(nullptr, "", "坏天气"); // 警告对话框QMessageBox::question(nullptr, "", "今天天气怎么样?"); // 问题对话框

QFileDialog

#include <QFileDialog>QFileDialog* flDialog = new QFileDialog(nullptr, "标题", "./"); // 打开当前文件对话框,没有过滤器的时候显示AllFile(*)flDialog->exec();// 也可以用静态函数QString path = QFileDialog::getExistingDirectory(nullptr, "", "./"); // 返回选择文件的路径if (!path.isEmpty())qInfo() << path; // 当选中文件,点击选择文件夹时触发信号,点取消,就返回空// 也可以获取文件路径QString filePath = QFileDialog::getOpenFileName(nullptr, "", "./", "image(*.jpg *.png);;file(*.c *.cpp)");qInfo() << filePath;// 获取多个文件auto files = QFileDialog::getOpenFileNames(nullptr, "", "./", "image(*.jpg *.png);;file(*.c *.cpp)"); // 返回Qstringlistfor (auto f : files) {qInfo() << f;}// 返回用户保存的文件,文件名可以不存在,不存在则创建auto savefile = QFileDialog::getSaveFileName();qInfo() << savefile;

QFontDialog

  • 通过QFont设置字体
#include <QPainter>
#include <QWidget>class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget* parent = nullptr);~Widget();protected:void paintEvent(QPaintEvent* event) override;
};Widget::Widget(QWidget* parent): QWidget(parent)
{QFont font;font.setBold(true); // 粗体font.setPointSize(30); // 设置点的大小font.setItalic(true); // 斜体font.setFamily("Arial");setFont(font); // 设置当前字体
}
void Widget::paintEvent(QPaintEvent* event)
{QPainter p(this);p.drawText(50, 50, "这就是我选择的字体");
}
  • 也可以通过对话框设置字体
#include <QFontDialog>//构造函数设置字体auto fontDialog = new QFontDialog(font, this);// fontDialog->show();// 或者静态成员设置字体bool ok;// QFont f = QFontDialog::getFont(&ok, font, this, "fontDialog静态成员");QFont f = QFontDialog::getFont(&ok, this); // 同上if (ok) {qInfo() << "选择了新字体:" << f.family();this->setFont(f);} else {qInfo() << "没选择,当前字体:" << font.family();this->setFont(font);}

QColorDialog

    // QColor类颜色定义
#include <QColor>
#include <QColorDialog>    QColor c(20, 34, 50);QColor c1("#3e99da");QColor c2;c2.setRed(10);c2.setGreen(20); // 设置红绿蓝,不设置就是0qInfo() << c << c1 << c2;// 颜色对话框,构造函数auto colorDialog = new QColorDialog(c, this);colorDialog->show();connect(colorDialog, &QColorDialog::colorSelected, [](QColor c) {qInfo() << c;});// 静态函数auto newcolor = QColorDialog::getColor(c, this, "选择颜色");qInfo() << newcolor; // 按OK,返回新的颜色,按取消,返回无效颜色

QInpuDialog

#include <QInputDialog>// 输入浮点数对话框bool ok;double dnum = QInputDialog::getDouble(this, "提示", "请输入浮点数", 100, 0, 999999, 2, &ok, Qt::Dialog, 10);// 初始值100,范围0到999999,2位小数,步长为10(上下箭头一次调整10)if (ok)qInfo() << "新的值" << dnum;elseqInfo() << "还是原来的值" << dnum;// 输入整数对话框int inum = QInputDialog::getInt(this, "提示", "请输入整数");qInfo() << inum;QStringList strlist;strlist << "学生"<< "萝莉"<< "御姐";qInfo() << QInputDialog::getItem(this, "提示", "Item", strlist);  qInfo() << QInputDialog::getText(this, "", ""); // 输入文本,按OK,返回输入的文本

QProgressDialog

    // 进度对话框
#include <QProgressDialog>
#include <QTimer>auto pgDialog = new QProgressDialog("正在发送", "取消发送", 0, 100, this);pgDialog->show();// 设置信号和槽QTimer* timer = new QTimer(this);timer->start(100);connect(timer, &QTimer::timeout, [=] {static int a = 0;pgDialog->setValue(a++);});connect(pgDialog, &QProgressDialog::canceled, timer, &QTimer::stop);

QErrorMessage

#include <QErrorMessage>
#include <QPushButton>auto errMsg = new QErrorMessage(this);auto btn = new QPushButton(this);connect(btn, &QPushButton::clicked, [=] {errMsg->showMessage("来了,老弟");errMsg->showMessage("是的", "1");errMsg->showMessage("是的", "2"); // 设置type,就可以和上面的区别开来,取消勾选任意一个,不影响另一个的出现errMsg->showMessage("不是");errMsg->showMessage("不是"); // 如果不设置,和上面是同一个,取消勾选任意一个,下次2个都不会出现});

http://www.ppmy.cn/news/1413652.html

相关文章

Celery使用异步、定时任务使用

一、什么是Celery 1.1、celery是什么 Celery是一个简单、灵活且可靠的&#xff0c;处理大量消息的分布式系统&#xff0c;专注于实时处理的异步任务队列&#xff0c;同时也支持任务调度。 Celery的架构由三部分组成&#xff0c;消息中间件&#xff08;message broker&#xf…

MySQL——Linux安装包

一、下载安装包 MySQL下载路径&#xff1a; MySQL :: MySQL Downloads //默认下载的企业版MySQL 下载社区版MySQL MySQL :: MySQL Community Downloads 1、源码下载 2、仓库配置 3、二进制安装包 基于官方仓库安装 清华centos 软件仓库&#xff1a; Index of /cen…

MySQL面试题系列-14

MySQL是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的RDBMS (Relational Database Management System&#xff0c;关系数据…

echarts 水库水位图

<div id"sssqtb" class"sssqtb"></div> // 水位示意图initChart() {var maxHeight "250"; //最大高度/堤坝高度let markline ["170", "120", "70", "0"]; //设计水位&#xff0c;汛限水…

v3+antd+echarts的bug记录

一、DatePicker 日期选择框 <a-range-picker v-model:value"value" /> 使用该组件时绑定数据必须使用ref 进行绑定&#xff0c;不能使用reactive 绑定&#xff0c;否则会出现 修改完日期&#xff0c;但是页面数据不会更新的bug 二、echarts折线图tooltip不显…

第十一届蓝桥杯省赛真题(C/C++大学B组)

试题A &#xff1a;门牌制作 #include <bits/stdc.h> using namespace std;const int N 100000; int arr[N];int main() {int ans 0,t;for(int i 1;i < 2020;i){t i;while(t > 0){if(t % 10 2) ans;t / 10;}}cout<<ans<<endl;return 0; } 试题B …

常见分类算法

常见的分类算法包括但不限于&#xff1a; K近邻算法 (K-Nearest Neighbors, KNN): 根据特征空间中样本点的距离&#xff0c;将待分类样本的类别归属为其K个最近邻居中最多数目的类别。 支持向量机 (Support Vector Machine, SVM): 通过寻找一个最优超平面&#xff0c;将不同类…

【C++第三阶段】deque容器评委打分案例

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 构造函数赋值操作大小操作插入删除数据存取排序评委评分案例描述 deque容器 双端数组&#xff0c;可以对头端插入删除操作。 如下图所示。 头部有插入删除操作&#xff0c;尾部亦然…