当前位置: 首页 > news >正文

推荐网站建设推广网站建设的重要性

推荐网站建设推广,网站建设的重要性,北京网站制作平台,网站建设属于什么开票类目QDialog OVERVIEW QDialog一、自定义对话框1.模态对话框2.非模态对话框3.练习代码 二、标准对话框1.消息对话框2.文件对话框3.颜色对话框4.字体对话框 对话框是 GUI 程序中不可或缺的组成部分#xff0c;对话框通常会是一个顶层窗口出现在程序最上层#xff0c;用于实现短期任…QDialog OVERVIEW QDialog一、自定义对话框1.模态对话框2.非模态对话框3.练习代码 二、标准对话框1.消息对话框2.文件对话框3.颜色对话框4.字体对话框 对话框是 GUI 程序中不可或缺的组成部分对话框通常会是一个顶层窗口出现在程序最上层用于实现短期任务或者简单用户交互。 Qt 中使用QDialog类实现对话框通常会设计一个类继承QDialog。如果QDialog 的 parent 为 NULL则该对话框会作为一个顶层窗口否则则作为其父组件的子对话框此时其默认出现的位置是 parent 的中心顶层窗口与非顶层窗口的区别在于顶层窗口在任务栏会有自己的位置而非顶层窗口则会共享其父组件的位置。 标准对话框是 Qt 内置的一系列对话框用于简化开发有很多对话框都是通用的比如打开文件、设置颜色、打印设置等。这些对话框在所有程序中几乎相同因此没有必要在每一个程序中都自己实现这么一个对话框。 Qt 的内置的标准对话框大致分为以下几类 QColorDialog 选择颜色QFileDialog 选择文件或者目录QFontDialog 选择字体QInputDialog 允许用户输入一个值并将其值返回QMessageBox 消息对话框模态对话框用于显示信息、询问问题等QPageSetupDialog 为打印机提供纸张相关的选项QPrintDialog 打印机配置QPrintPreviewDialog打印预览QProgressDialog 显示操作过程。 一、自定义对话框 对话框分为模态对话框和非模态对话框 模态对话框会阻塞同一应用程序中其它窗口的输入。模态对话框很常见比如“打开文件”功能。你可以尝试一下记事本的打开文件当打开文件对话框出现时我们是不能对除此对话框之外的窗口部分进行操作的。非模态对话框相反例如查找对话框我们可以在显示着查找对话框的同时继续对记事本的内容进行编辑。 Qt 支持模态对话框和非模态对话框模态与非模态的实现 使用 QDialog::exec() 实现应用程序级别的模态对话框使用 QDialog::open() 实现窗口级别的模态对话框使用 QDialog::show() 实现非模态对话框。 1.模态对话框 Qt 有两种级别的模态对话框 应用程序级别的模态默认 当该种模态的对话框出现时用户必须首先对对话框进行交互直到关闭对话框然后才能访问程序中其他的窗口。 窗口级别的模态 该模态仅仅阻塞与对话框关联的窗口但是依然允许用户与程序中其它窗口交互。窗口级别的模态尤其适用于多窗口模式。 调用exec()将对话框显示出来模态对话框,当对话框出现时用户不能与主窗口进行任何交互直到关闭了该对话框。 QDialog dialog(this);//对象创建在栈上匿名函数释放后 dialog对象会释放 dialog.resize(400, 300); dialog.setWindowTitle(modal dialog); dialog.exec(); qDebug() modal dialog poped up.;2.非模态对话框 下面将 exec() 修改为 show() 定义出非模态对话框 QDialog dialog(this); dialog-resize(400, 300); dialog-setWindowTitle(modalless dialog); dialog-show(); qDebug() modalless dialog poped up.;对话框竟然一闪而过这是因为 show() 函数不会阻塞当前线程对话框会显示出来然后函数立即返回代码继续执行。dialog 是建立在栈上的当show()函数返回MainWindow::open()函数结束dialog 超出作用域被析构因此对话框消失了。 将 dialog 改成堆上建立就不会出现这个问题了 QDialog *dialog new QDialog(this);//对象创建在堆区匿名函数释放后 dialog对象不会释放 dialog-resize(400, 300); dialog-setWindowTitle(modalless dialog); dialog-show(); qDebug() modalless dialog poped up.;上面的代码是有问题的dialog 存在内存泄露dialog 使用 new 在堆上分配空间却一直没有 delete。解决方案也很简单将 MainWindow 的指针赋给 dialog 即可利用对象树自动析构释放内存。 不过这样做存在问题 若对话框不是在一个界面类中出现由于QWidget的parent必须是QWidget指针就不能将普通的 C 类指针传给 Qt 对话框。另外如果对内存占用有严格限制当将主窗口作为parent时若主窗口不关闭对话框就不会被销毁导致会一直占用内存。 在这种情景下可以设置dialog的WindowAttribute解决函数设置对话框关闭时自动销毁对话框。 QDialog *dialog new QDialog(this);//对象创建在堆区匿名函数释放后 dialog对象不会释放 dialog-resize(400, 300); dialog-setWindowTitle(modalless dialog); dialog-setAttribute(Qt::WA_DeleteOnClose);//防止用户重复操作 多次在堆区开辟内存 导致内存泄露 dialog-show(); qDebug() modalless dialog poped up.;3.练习代码 #include mainwindow.h #include ui_mainwindow.h #include QDialog #include QDebugMainWindow::MainWindow(QWidget *parent):QMainWindow(parent),ui(new Ui::MainWindow) {ui-setupUi(this);//点击按钮 弹出对话框connect(ui-actionnew, QAction::triggered, this, [](){QDialog dialog(this);//对象创建在栈上匿名函数释放后 dialog对象会释放dialog.resize(400, 300);dialog.setWindowTitle(modal dialog);dialog.exec();qDebug() modal dialog poped up.;});connect(ui-actionopen, QAction::triggered, this, [](){QDialog *dialog new QDialog(this);//对象创建在堆区匿名函数释放后 dialog对象不会释放dialog-resize(400, 300);dialog-setWindowTitle(modalless dialog);dialog-setAttribute(Qt::WA_DeleteOnClose);//防止用户重复操作 多次在堆区开辟内存 导致内存泄露dialog-show();qDebug() modalless dialog poped up.;}); }MainWindow::~MainWindow() {delete ui; }二、标准对话框 1.消息对话框 QMessageBox用于显示消息提示。我们一般会使用其提供的几个 static 函数 about显示关于对话框。aboutQt显示关于 Qt 对话框。该对话框用于显示有关 Qt 的信息。critical显示严重错误对话框。information与QMessageBox::critical()类似不同之处在于这个对话框提供一个普通信息图标。question与QMessageBox::critical ()类似不同之处在于这个对话框提供一个问号图标并且其显示的按钮是“是”和“否”。warning与QMessageBox::critical()类似不同之处在于这个对话框提供一个黄色叹号图标。 使用QMessageBox::question()来询问一个问题关于函数参数的解释 这个对话框的父窗口是 this。QMessageBox是QDialog的子类这意味着它的初始显示位置将会是在 parent 窗口的中央。 第二个参数是对话框的标题。 第三个参数是我们想要显示的内容。 第四个参数是关联的按键类型我们可以使用或运算符|指定对话框应该出现的按钮。比如我们希望是一个 Yes 和一个 No。 最后一个参数指定默认选择的按钮。这个函数有一个返回值用于确定用户点击的是哪一个按钮。按照我们的写法应该很容易的看出这是一个模态对话框因此我们可以直接获取其返回值。 QMessageBox使用案例 #include mainwindow.h #include ui_mainwindow.h #include QDialog #include QDebug #include QMessageBoxMainWindow::MainWindow(QWidget *parent):QMainWindow(parent),ui(new Ui::MainWindow) {ui-setupUi(this);//点击按钮 弹出对话框connect(ui-actionnew, QAction::triggered, this, [](){QDialog dialog(this);//对象创建在栈上匿名函数释放后 dialog对象会释放dialog.resize(400, 300);dialog.setWindowTitle(modal dialog);dialog.exec();qDebug() modal dialog poped up.;});connect(ui-actionopen, QAction::triggered, this, [](){QDialog *dialog new QDialog(this);//对象创建在堆区匿名函数释放后 dialog对象不会释放dialog-resize(400, 300);dialog-setWindowTitle(modalless dialog);dialog-setAttribute(Qt::WA_DeleteOnClose);//防止用户重复操作 多次在堆区开辟内存 导致内存泄露dialog-show();qDebug() modalless dialog poped up.;});//点击按钮 弹出消息对话框connect(ui-actionwelcome, QAction::triggered, this, [](){QMessageBox::information(this, welcome, welcome to this application!~ );qDebug() critical message box poped up.;});connect(ui-actionedit, QAction::triggered, this, [](){QMessageBox::critical(this, sorry, being developing, looking forward to more content.);qDebug() critical message box poped up.;});connect(ui-actionhelp, QAction::triggered, this, [](){QMessageBox::StandardButton choose;choose QMessageBox::question(this, question?, Is there any problem when using this product? );if (choose QMessageBox::Yes) {qDebug() User have question about the use of the software.;} else if (choose QMessageBox::No) {qDebug() User have no question about the use of the software.;}qDebug() question message box poped up.;});connect(ui-actionproject, QAction::triggered, this, [](){QMessageBox::warning(this, warning, project cannot be edit now.);qDebug() question message box poped up.;}); }MainWindow::~MainWindow() {delete ui; }自定义细节QMessageBox细节 QMessageBox类的 static 函数优点是方便使用缺点是非常不灵活。只能使用简单的几种形式。为了能够定制QMessageBox细节必须使用QMessageBox的属性设置 API。如果希望制作一个询问是否保存的对话框可以使用如下的代码 MainWindow::MainWindow(QWidget *parent):QMainWindow(parent),ui(new Ui::MainWindow) {ui-setupUi(this);//点击save按钮 弹出save对话框模态对话框connect(ui-actionsave, QAction::triggered, this, [](){QMessageBox msgBox(this);msgBox.setText(tr(The document has been modified.));msgBox.setInformativeText(tr(Do you want to save your changes?));msgBox.setDetailedText(tr(Differences here...));msgBox.setStandardButtons(QMessageBox::Save| QMessageBox::Discard| QMessageBox::Cancel);msgBox.setDefaultButton(QMessageBox::Save);int ret msgBox.exec();switch (ret) {case QMessageBox::Save:qDebug() Save document!;break;case QMessageBox::Discard:qDebug() Discard changes!;break;case QMessageBox::Cancel:qDebug() Close document!;break;}}); }msgBox 是一个建立在栈上的QMessageBox实例。 设置其主要文本信息为 The document has been modified.informativeText 则是会在对话框中显示的简单说明文字。使用了detailedText详细信息当我们点击了详细信息按钮时对话框可以自动显示更多信息。 自定义的对话框的按钮有三个保存、丢弃和取消。最后我们使用了exec()是其成为一个模态对话框根据其返回值进行相应的操作。 2.文件对话框 首先需要创建一个带有文本编辑功能的窗口 QAction *openAction ui-actionopen; QAction *saveAction ui-actionsave; //设置按钮图片 openAction-setIcon(QIcon(:/res/img/ParticleSmoke.png)); saveAction-setIcon(QIcon(:/res/img/filetransfer.png)); //设置按钮提示tips openAction-setStatusTip(tr(Open an existing file)); saveAction-setStatusTip(tr(Save a new file)); //设置中心组件为textEdit QTextEdit *textEdit new QTextEdit(this);使用connect()函数为这两个QAction对象添加响应的动作 connect(openAction, QAction::triggered, this, MainWindow::openFile); connect(saveAction, QAction::triggered, this, MainWindow::saveFile);编写核心的逻辑处理openFile() 和 saveFile() 函数 //打开文件 void MainWindow::openFile() {QString filepath QFileDialog::getOpenFileName(this, tr(Open File), ., tr(Text Files(*.txt)));if(!filepath.isEmpty()) {QFile file(filepath);if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {QMessageBox::warning(this, tr(Read File), tr(Cannot open file:\n%1).arg(filepath));return;}QTextStream in(file);textEdit-setText(in.readAll());file.close();} else {QMessageBox::warning(this, tr(Path), tr(You did not select any file.));} }//保存文件 void MainWindow::saveFile() {QString filepath QFileDialog::getSaveFileName(this, tr(Open File), ., tr(Text Files(*.txt)));if(!filepath.isEmpty()) {QFile file(filepath);if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {QMessageBox::warning(this, tr(Write File), tr(Cannot open file:\n%1).arg(filepath));return;}QTextStream out(file);out textEdit-toPlainText();file.close();} else {QMessageBox::warning(this, tr(Path), tr(You did not select any file.));} }在openFile()函数中我们使用QFileDialog::getOpenFileName()来获取需要打开的文件的路径。这个函数原型如下 QString getOpenFileName(QWidget * parent 0,const QString caption QString(),const QString dir QString(),const QString filter QString(),QString * selectedFilter 0,Options options 0)parent父窗口Qt 的标准对话框提供静态函数用于返回一个模态对话框 caption对话框标题 dir对话框打开时的默认目录 . 代表程序运行目录 / 代表当前盘符的根目录特指 Windows 平台Linux 平台当然就是根目录这个参数也可以是平台相关的比如“C:\”等 filter过滤器我们使用文件对话框可以浏览很多类型的文件但是很多时候我们仅希望打开特定类型的文件。比如文本编辑器希望打开文本文件图片浏览器希望打开图片文件。过滤器就是用于过滤特定的后缀名。如果我们使用“Image Files(*.jpg *.png)”则只能显示后缀名是 jpg 或者 png 的文件。如果需要多个过滤器使用“;;”分割比如“JPEG Files(*.jpg);;PNG Files(*.png)” selectedFilter默认选择的过滤器 options对话框的一些参数设定比如只显示文件夹等等它的取值是enum QFileDialog::Option每个选项可以使用 | 运算组合起来。 在saveFile()中使用的QFileDialog::getSaveFileName()也是类似的。使用这种静态函数在 Windows、Mac OS 上面都是直接调用本地对话框但是 Linux 上则是QFileDialog自己的模拟。这表明如果你不使用这些静态函数而是直接使用QFileDialog进行设置那么得到的对话框很可能与系统对话框的外观不一致需要注意的。 3.颜色对话框 //颜色对话框 connect(ui-actioncolor, QAction::triggered, this, [](){QColor color QColorDialog::getColor(QColor(255, 0, 0));qDebug() red color.red() green color.green() blue color.blue(); });4.字体对话框 //字体对话框 connect(ui-actionfont, QAction::triggered, this, [](){bool flag;QFont font QFontDialog::getFont(flag, QFont(方正喵呜简体, 18));qDebug() font-family: font.family() font-size: font.pointSize() isBold: font.bold() isitalic: font.italic();qDebug() QFileDialog poped up.; });
http://www.zqtcl.cn/news/760860/

相关文章:

  • 物流信息平台网站建设一流本科专业建设点网站
  • 天猫网站建设的目标是什么装潢设计软件
  • 电商网站首页图片网站功能模块建设
  • 邮件服务器是不是网站服务器黄江网站建设公司
  • 科技部网站方案网页设计网站设计欣赏
  • 自贡建设机械网站网站策划与运营课程认知
  • 公司做网站该注意哪些廊坊seo
  • 网站开发目录高尔夫 wordpress
  • 三只松鼠网站建设不做网站做百家号
  • 石家庄网站关键词推广淘宝网站建设设计模板
  • 马鞍山什么房产网站做的好网速
  • 国外做兼职网站软件园二期做网站的公司
  • 淘客网站备案教程网页设计与制作教程十四五规划
  • 哪些网站可以做外部锚文本网页设计个人简历怎么做
  • 福州网站营销北京著名网站建设公司
  • 导购网站开发 源码wordpress 获取总页数
  • 网站名查找wordpress评论人
  • 网络推广最好的网站有哪些wordpress怎么用万网域名
  • 大连仟亿科技网站建设公司 概况网络信用贷款哪个好
  • 配置了iis打不开网站外贸建站哪个最便宜
  • 酒店网站建设描述免费建站网站有哪些
  • 做宠物的网站主题思想网站建设 司法公开的需要
  • 建站图标素材前端面试题2022
  • 宁夏住房建设厅网站官网最新版cmsv6
  • 网站建设备案和免备案的区别建网站视频教程
  • 网站推广话术wordpress主题没法用
  • 微信网站开发 全屏包头教育云平台网站建设
  • 诸城手机网站建设做竞价网站
  • 网站策划报告公司简介模板范文高大上
  • 做信息图的免费网站如何获取网站是哪个公司制作