当前位置: 首页 > 编程日记 > 正文

9.QT-标准对话框

Qt提供的可复用的标准对话框,全部继承自QDialog类,如下图所示:

  • QMessageBox:信息对话框,用于显示信息、询问问题等;
  • QFileDialog:文件对话框
  • QColorDialog:颜色对话框
  • QInputDialog:输入对话框(允许用户输入一次数据)
  • QFontDialog:字体对话框
  • QProgressDialog:进度对话框
  • QPrintDialog:打印对话框
  • QPrintPreviewDialog:打印预览对话框
  • QPageSetupDialog:打印设置对话框,为打印机提供纸张相关的选项

标准对话框使用方式

QDialogType dialog(this); //对话框对象的定义

dialog.setPropertyxxxx(value); //对话框属性设置if(dialog.exec() == QDialogType::vaule)
{
Type v = dialog.getDialogValue(); //获取对话框数据
//... ... 处理数据

}

QMessageBox消息对话框
代码如下:

#include <QtGui/QApplication>
#include <QDebug>
#include <QMessageBox> 
int main(int argc, char *argv[])
{ 
QApplication a(argc, argv);
QMessageBox msg;
msg.setWindowTitle("Message");
msg.setText("This is Message content!");
msg.setIcon(QMessageBox::Information);        //选择图标为:信息类型 
msg.setStandardButtons(QMessageBox::Ok|QMessageBox::Cancel);
msg.setButtonText(QMessageBox::Ok,QString("确定"));
msg.setButtonText(QMessageBox::Cancel,QString("取消"));
if(msg.exec()==QMessageBox::Ok)
{
qDebug()<<"QMessageBox::Ok"; //当点击确定按钮,则会打印信息
}
return 0;
}

效果:

也可以使用一个静态函数来创建消息对话框:

StandardButton QMessageBox::information(QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButtondefaultButton = NoButton);
//显示信息对话框, 将显示一个反叹号图标

StandardButton QMessageBox::question(QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButtondefaultButton = NoButton);
//显示问题对话框, 将显示一个问号图标StandardButton QMessageBox::warning(QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButtondefaultButton = NoButton);
//显示警告对话框, 将显示一个黄色叹号图标

StandardButton QMessageBox::critical(QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton= NoButton);
//显示严重错误对话框, 将显示一个红色的错误符号 

void QMessageBox::about(QWidget * parent, const QString & title, const QString & text);
//显示关于对话框,该对话框只有一个OK按钮

比如:

#include <QtGui/QApplication>
#include <QDebug>
#include <QMessageBox>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMessageBox msg;
int ret = msg.question(NULL,"Question","This is Message Question",QMessageBox::Ok|QMessageBox::Cancel);
if(ret==QMessageBox::Ok)
{
qDebug()<<"QMessageBox::Ok"; //当点击Ok按钮,则会打印qDebug
}
return 0;
}

效果:


QFileDialog文件对话框
QFileDialog的exec()返回值为QFileDialog::Accepted或者QFileDialog::Rejected

需要以下成员函数:

setAcceptMode (QFileDialog::AcceptOpen);    
            //设置文本对话框是用来打开文件(AcceptOpen),还是用来保存文件(AcceptSave)

setDirectory (const QString & directory );        //设置文本对话框路径

setFileMode ( FileMode mode );
                     //设置文本对话框打开的文件模式,是单个文件?还是多个文件?还是包括目录?
void  selectFile(const QString & filename);
        //预设置文件对话框默认打开的文件名
QStringList QFileDialog::selectedFiles();
          //用来获取用户选择的多个 文件信息 位置(绝对路径),比如:"C:/Users/Administrator/Desktop/新建文本文档.txt" 
QString	selectedFilter();
      //获取用户选择的文件过滤器

文件类型过滤器
通过setFilter()成员函数实现,文件过滤器定义规则如下:

  • 显示名(*.后缀名1 *.后缀名2 ...*.后缀名n)

如果,有多个规则,则可以通过;;来隔开,例如:

setFilter("Image(*.jpg *.png *.bmp);;Text(*.txt);;All(*.*)"); 

以打开文件为例:

          QFileDialog dlg;dlg.setAcceptMode(QFileDialog::AcceptOpen);dlg.setFileMode(QFileDialog::ExistingFile);  //模式为:已存在的文件,如果为保存文件,则不需要指定模式dlg.setFilter("Image(*.jpg *.png *.bmp);;Text(*.txt);;All(*.*)");dlg.setDirectory("D:");dlg.selectFile("新建文件.txt");if(dlg.exec() == QFileDialog::Accepted){QString Str=dlg.selectedFiles()[0];         //获取用户选择的文件QString  filter = dlg.selectedFilter();    //获取用户选择的过滤器
qDebug()<<Str;qDebug()<<filter;}

也可以使用一个静态函数直接打开文件,或者保存文件:

QString QFileDialog::getOpenFileName (
QWidget * parent = 0,    //父组件
const QString & caption = QString(),    //标题
const QString & dir = QString(),    //设置路径, .表示当前路径, /表示更目录
const QString & filter = QString(), //过滤器
QString * selectedFilter = 0,    //用户选择文件后的过滤器信息
Options options = 0 );           //参数,它的取值为enum QFileDialog::Option  ,比如: QFileDialog::ShowDirsOnly (只显示目录)

QString getSaveFileName( QWidget
*parent = 0, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = 0, Options options = 0);


QInputDialog输入对话框
QInputDialog的exec()返回值为QFileDialog::Accepted或者QFileDialog::Rejected
常用函数:

setLabelText ( const QString & text );              //设置对话框标签
setOkButtonText ( const QString & text ); //设置OK按钮文本
setCancelButtonText ( const QString & text ) //设置Cancel按钮文本
setInputMode ( InputMode mode); //设置输入模式,是文本,还是整数,还是浮点数
setIntRange( int min, int max ); //如果是整数模式,则该函数可以设置允许整数范围 setDoubleRange ( double min, double max ); //如果是浮点数模式,则该函数可以设置允许浮点数范围
QString textValue (); //返回文本模式的输入对话框返回值 int intValue (); //返回整数模式的输入对话框返回值 double doubleValue (); //返回浮点数模式的输入对话框返回值

示例:

QInputDialog log;
log.setInputMode(QInputDialog::TextInput);
log.setCancelButtonText("取消");
log.setOkButtonText("确定");
log.setWindowTitle("输入ID");
log.setLabelText("请输入ID");
if(log.exec()== QInputDialog::Accepted)
{
qDebug()<<log.textValue();
}

效果:

也可以使用一个静态函数实现输入对话框:

设置文本输入对话框:

QString QInputDialog::getText( QWidget * parent, //父组件
const QString & title,                 //窗口标题
const QString & label,                 //标签提示
QLineEdit::EchoMode mode = QLineEdit::Normal,    //输入框模式
constQString & text = QString(),           //预定义的文本
bool * ok = 0,                       //如果用户点击ok,则ok =true
Qt::WindowFlags flags = 0 );

设置列表输入对话框:

QString QInputDialog::getItem ( QWidget * parent, //父组件
const QString & title,                            //窗口标题
const QString & label,                            //标签提示
const QStringList & items,                         //字符串链表,用来显示列表
int current = 0,                                   //预定义,表示列表中第哪组
bool editable = true,                              //true表示列表可编译
bool * ok = 0,                                    //如果用户点击ok,则ok =true
Qt::WindowFlags flags = 0 )

除此之外还有:getDouble(),getInt();

以getItem()为例:

QStringList items;
items << "Spring" << "Summer" << "Fall"<< "Winter";
bool ok;
QString item
= QInputDialog::getItem(0, "QInputDialog::getItem()","Season:", items, 0, false, &ok);
if (ok && !item.isEmpty()) qDebug()<<item;

效果:


QColorDialog颜色对话框
QColorDialog的exec()返回值为QFileDialog::Accepted或者QFileDialog::Rejected

需要用到以下函数:

void setCurrentColor(const QColor & color )    //设置打开后的颜色对话框预定颜色
                                    //它的取值可以为enum Qt::GlobalColor,   比如白色Qt::white
                                    //也可以为QColor类,    比如QColor(100,100,100),表示RGB(100,100,100)

QColor selectedColor();             //返回用户选择的哪个颜色,如果用户点击了退出,则返回的QColor::isValid()为falsebool QColor::isValid();             //颜色有效返回true,无效则返回false

示例:

 QColorDialog dlg;
dlg.setCurrentColor(Qt::white);
//预定义白色 dlg.exec();QColor color=dlg.selectedColor(); if(color.isValid()) //如果用户选择了颜色 {qDebug()<<color.red();qDebug()<<color.green();qDebug()<<color.blue(); }

 

也可以使用一个静态函数直接打开颜色对话框:

static QColor getColor(
   const QColor &initial = Qt::white, //预定义颜色QWidget *parent = 0);              //父组件

示例:

QColor color= QColorDialog::getColor(Qt::white);
 if(color.isValid()) //如果用户选择了颜色
{qDebug()<<color.red();qDebug()<<color.green();qDebug()<<color.blue();
}

QFontDialog字体对话框
QColorDialog的exec()返回值为QFileDialog::Accepted或者QFileDialog::Rejected

需要用到以下函数:

void setCurrentFont ( const QFont & font )    //设置打开后的字体对话框预定字体
                          //以"Courier New"字体为例,则参数填为font("Courier New",10,QFont::Bold,true);
                          //表示字体大小为10,加粗,斜体 
QFont QFontDialog::selectedFont (); //返回用户选择的字体

示例:

int main(int argc, char *argv[])
{QApplication a(argc, argv);QWidget w;w.setFixedSize(360,300);QLabel label("This is QLabel!",&w);w.show();
QFontDialog dlg(
&w);dlg.setFont(label.font());
if(dlg.exec()==QFontDialog::Accepted){label.setFont(dlg.selectedFont());label.adjustSize();}
return a.exec(); }

选择前-效果:

选择后-效果:

也可以使用一个静态函数直接打开字体对话框:

QFont QFontDialog::getFont( bool * ok, const QFont & initial, QWidget * parent, 
const QString & title,FontDialogOptions options ) ;


QProgressDialog进度条对话框

常用函数:

setMinimum(int minimum);             //设置进度条最小值
setMaximum(int maximum);        //设置进度条最大值
setValue(int value);          //设置当前进度值
setAutoClose(bool close);        //设置自动关闭,如果进度值=最大值时,则会自动关闭对话框
setLabelText(const QString &text); //设置标签提示
setCancelButtonText(const QString &text); //设置Cancel按钮提示
setCancelButton(QPushButton *button); //从新自定义按钮框架,如果添NULL,则表示隐藏按钮
setBar( QProgressBar * bar ); //从新自定义进度条框架
setLabel ( QLabel * label ); //从新自定义标签

示例:

QProgressDialog dlg;
dlg.setMinimum(0);
dlg.setMaximum(1000);
dlg.setValue(520);
dlg.setWindowTitle("Update");
dlg.setLabelText("Update... ...");
dlg.setCancelButtonText("取消");
dlg.exec();

效果:

也可以直接通过构造函数设置:

QProgressDialog ( const QString & labelText, 
const QString & cancelButtonText, 
int minimum, 
int maximum, 
QWidget * parent = 0, 
Qt::WindowFlags f = 0 );

QPrintDialog打印机对话框

QPrinter类介绍:

  • QPrinter是打印设备及其参数的封装
  • QPrinter封装了系统中打印设备的驱动接口

试验:

  QPrintDialog printDialog;
if (printDialog.exec() == QDialog::Accepted)
{QPrinter *printer=printDialog.printer(); //获取QprinterQTextDocument td;td.setPlainText("TEST TEST TEST"); //设置文本//printer->setOutputFileName("D:\\1.pdf"); //设置文件路径td.print(printer); //打印td
}

效果:

 

相关文章:

【Python】解决print不能立即打印的问题

1、问题描述 在Python中使用print打印hello world时&#xff0c;终端不显示 def hello():print("hello world!")2、原因 因为标准输入输出stdin/stdout有缓冲区&#xff0c;所以使用print不能立即打印出来&#xff0c;作为刚接触Python的菜鸟&#xff0c;迷瞪了半…

windows mobile做一个摄象头预览程序

zdirectshow的原理大概大家都知道,基本就是用微软封装的接口来实现硬件无关性,但是最终调用的接口都要在驱动层有对应的实现: 为了更清楚地演示directshow的数据传输过程,我必须说明的这个程序的基本流程。我采用的是vs2005 windows mobile 6。0 professional 仿真模拟器&…

初学者的机器学习入门实战教程!

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」&#xff0c;购票请扫码咨询 ↑↑↑作者 | Adrian Rosebrock译者 | kbsc13&#xff0c;京东算法工程师&#xff0c;研究领域计算机视觉来源 | 机器学习与计算机视觉&#xff08;ID&#xff1a;AI_Developer&#xff09;这是…

【Qt】调用Python函数:无参数、单个参数、多个参数、数组参数

一、链接配置 如果缺少头文件需要安装python3-dev: sudo apt-get install python3-dev链接libpython3.4库,添加头文件路径,以Qt为例: INCLUDEPATH += /usr/include/python3.4 LIBS += -L /usr/lib/python3.4/config-3.4m-x86_64-linux-gnu -lpython3.4二、头文件 因为p…

分布式系统的问题

本文内容翻译自《Designing Data-Intensive Applications》一书的第8章。 近几章主要介绍系统如何处理错误。例如&#xff0c;我们讨论了副本故障转移&#xff0c;复制滞后和事务的并发控制。当我们理解实际系统中可能出现的各种边界情况时&#xff0c;我们就能更好地处理它们。…

php-cgi占用cpu资源过高的解决方法

转的网上的&#xff0c;不过对PHP-CGI菜鸟的人&#xff0c;还是有点帮助的。 1. 一些php的扩展与php版本兼容存在问题&#xff0c;实践证明 eAccelerater与某些php版本兼容存在问题&#xff0c;具体表现时启动php-cgi进程后&#xff0c;运行10多分钟&#xff0c;奇慢无比&#…

请收下这份NLP热门词汇解读

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」&#xff0c;购票请扫码咨询 ↑↑↑本文转载自微软研究院AI头条&#xff08;ID:MSRAsia&#xff09;编者按&#xff1a;在过去的一段时间&#xff0c;自然语言处理领域取得了许多重要的进展&#xff0c;Transformer、BERT、…

【Ubuntu】dpkg: 处理软件包 XXXX (--configure)时出错解决方法

1、使用apt-get --purge remove删除安装包时报错 dpkg: 处理软件包 python-gflags (–configure)时出错&#xff1a; 子进程 已安装 post-installation 脚本 返回了错误号 1 正在设置 python-sklearn (0.14.1-2) … Traceback (most recent call last): File “/usr/bin/pycom…

c#devexpress GridContorl添加进度条

demo 的实现图 下边是步骤和代码 1定义 时钟事件,定时的增加进度条的增量. 2: 添加进度条 3;定义字段属性 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; …

信达充值旗舰店

在淘宝上新开了一个话费 游戏点卡充值的小店&#xff0c;以后大家话费没了可以联系我啊&#xff0c;速度还是蛮快的&#xff0c;都是赔本卖的只想提高点信誉&#xff0c;所以价格也是最最低的了&#xff0c;感谢大家的支持&#xff0c;多多帮忙啊^_^ http://sjzxinda.taobao.co…

完整代码+实操!手把手教你操作Faster R-CNN和Mask R-CNN

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑机器视觉领域的核心问题之一就是目标检测&#xff08;Object Detection&#xff09;&#xff0c;它的任务是找出图像当中所有感兴趣的目标&#xff08;物体&#xff09;&#xff0c…

【Dlib】使用dlib_face_recognition_resnet_model_v1.dat无法实现微调fune-tuning

1、问题描述 dlib官方使用resnet训练人脸识别&#xff0c;训练了300万的数据&#xff0c;网络参数保存在dlib_face_recognition_resnet_model_v1.dat中。 测试中识别lfw数据时&#xff0c;准确率能达到99.13%&#xff0c;但是在识别自己的数据时&#xff0c;准确率有点低&…

Visual Studio 2017 - Windows应用程序打包成exe文件(1)- 工具简单总结

最近有对一个Windows应用程序少许维护和修改。修改之后要发布新的exe安装文件&#xff0c;打包exe文件时&#xff0c;遇到了很头疼的问题&#xff0c;还好最后解决了&#xff0c;记录一下。 Visual Studio版本&#xff1a;Visual Studio 2017 Visual Studio 2017 打包插件 新建…

NET也有闭包

NET也有闭包在.NET中&#xff0c;函数并不是第一级成员&#xff0c;所以并不能像JavaScript那样通过在函数中内嵌子函数的方式实现闭包&#xff0c;通常而言&#xff0c;形成闭包有一些值得总结的非必要条件&#xff1a; 嵌套定义的函数。 匿名函数。 将函数作为参数或…

【opencv】ubuntu14.04上编译opencv2.4

参考博客 https://blog.csdn.net/c406495762/article/details/62896035 1、安装依赖库 sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install libv4l-0 libv…

1024块TPU在燃烧!BERT训练从3天缩短到76分钟 | 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑作者 | 琥珀出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;“Jeff Dean称赞&#xff0c;TensorFlow官方推特支持&#xff0c;BERT目前工业界最耗时的应用&#xff0c;计…

牵引力教育设计总监解密9大2018潮流UI设计趋向

作为一名紧跟时代潮流的UI设计师&#xff0c;设计的风格一定要紧跟上最新的设计趋势&#xff0c;因为更为有效且颇具趣味的响应式图标必将得到关注。同时&#xff0c;鲜艳丰富的色彩&#xff0c;精彩纷呈的插图设计都会博得用户眼球。这样你的设计更容易获得更多人的认可与热爱…

Android媒体相关开发应用程序接口

翻译自&#xff1a;http://developer.android.com/guide/topics/media/index.html MediaAndroid框架支持各种普通media类型的编解码&#xff0c;因此你可以很容易地把音频&#xff0c;视频和图片整合到你的应用程序中。通过使用MediaPlayer的接口&#xff0c;你可以播放各种音视…

Facebook开源图嵌入“神器”:无需GPU,高效处理数十亿级实体图形 | 极客头条...

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑编译 | Major、一一出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;有效处理大规模图对于促进人工智能的研究和应用至关重要&#xff0c;但特别是在工业应用中的图&…

【opencv】ubuntu14.04上编译opencv-4.0.1 + opencv_contrib-4.0.1

1、要求 编译器版本&#xff1a;c11 cmake版本&#xff1a;3.5.1 2、安装camke 2.1 官网下载&#xff1a;https://cmake.org/download/ 选择&#xff1a;Linux x86_64 cmake-3.14.1-Linux-x86_64.sh 2.2 安装&#xff1a; 将cmake-3.14.1-Linux-x86_64.sh拷贝考ubuntu中&…

软件开发文档模板 (学习)

1 可行性研究报告   可行性研究报告的编写目的是&#xff1a;说明该软件开发项目的实现在技术、经济和社会条件方面的可行性&#xff1b;评述为了合理地达到开发目标而可能先择的各种方案&#xff1b;说明论证所选定的方案。 可行性研究报告的编写内容要求如下&#xff1a; …

Unix数据中心主宠儿

曾几何时UNIX一直是除个人电脑之外的领域中应用最为广泛的操作系统&#xff0c;并且为现代操作系统的成型奠定了基础&#xff0c;可以说UNIX的历史就像应用程序本身一样耐人寻味。UNIX的过去回首1983年&#xff0c;肯.托马森和D.里奇由于对操作系统发展史以及UNIX操作系统应用所…

【AI】基本概念

1、什么是人工智能 人工智能&#xff08;AI&#xff09;是通过研究、开发&#xff0c;来找到用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的综合性的科学技术。其表现为&#xff0c;让计算机系统通过机器学习等方式&#xff0c;来获得可以履行原本只有依…

在浏览器中进行深度学习:TensorFlow.js (四)用基本模型对MNIST数据进行识别

2019独角兽企业重金招聘Python工程师标准>>> 在了解了TensorflowJS的一些基本模型的后&#xff0c;大家会问&#xff0c;这究竟有什么用呢&#xff1f;我们就用深度学习中被广泛使用的MINST数据集来进行一下手写识别的操作。 MINST数据集 MINST是一组0到9的手写数字…

不止临床应用,AI还要帮不懂编程的医生搞科研

近日&#xff0c;推想科技发布 AI 学者科研平台 InferScholar Center&#xff0c;该平台为更多的医生提供零门槛的 AI 科研能力&#xff0c;让医生可以快速将深度学习、影像组学以及文本数据处理相关的前沿技术应用到自己的临床科研实践中&#xff0c;他们将为平台上的医疗科研…

rhel6Inode详解

在Linux文件系统中&#xff0c;很多人对Inode都不太明白&#xff0c;今天我就和大家一起来分享一下我对Inode的认识&#xff0c;如果有理解错误的地方&#xff0c;请大家多多批评指点。在上一篇一天一点学习Linux之认识文件系统中&#xff0c;在最后给出了一张EXT3文件系统结构…

争论不休的TF 2.0与PyTorch,到底现在战局如何了? | 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑作者 | Jeff Hale译者 | Jackey编辑 | Jane出品 | AI科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;【导语】 TensorFlow 2.0 和 PyTorch 1.0 陆续发布后&#xff0c;…

struts2实验2:struts2.xml action中* ,{}以及${}

p.s 关键在于struts.xml中的匹配&#xff0c;使用* ,{}以及${}可以让代码更加简洁清晰 代码核心思路 在struts.xml中通过路由(url)去指定控制逻辑的Action中的方法,例如 <package name"admin" namespace"/admin" extends"struts-global">&…

【Ubuntu】dpkg-deb -c :查看deb文件中的内容

1、dpkg-deb -c :查看deb文件中的内容 $ dpkg-deb -c packageeg&#xff1a; $ dpkg-deb -c sogoupinyin_2.2.0.0108_amd64.deb drwxr-xr-x root/root 0 2018-04-18 16:50 ./ drwxr-xr-x root/root 0 2018-04-18 16:50 ./etc/ drwxr-xr-x root/root …

捕获Camera并保存图片到本地(照相功能) -samhy

Flex博文 捕获Camera并保存图片到本地(照相功能) -samhy作者:admin 日期:2010-07-12字体大小: 小 中 大捕获Camera并保存图片到本地(照相功能)这几天对Camera类进行了一下规整&#xff0c;并利用JPGEncoder类实现了照相的功能,代码如下&#xff1a; XML/HTML代码import flash.m…