首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >9.QT-标准对话框

9.QT-标准对话框

作者头像
诺谦
发布2018-05-28 15:38:19
1.3K0
发布2018-05-28 15:38:19
举报
文章被收录于专栏:Linux驱动Linux驱动

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 information(QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButtondefaultButton = NoButton);
//显示信息对话框, 将显示一个反叹号图标

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

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

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

void 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 );
           //设置文本对话框打开的文件模式,是单个文件?还是多个文件?还是包括目录?

QStringList QFileDialog::selectedFiles();
          //用来获取用户选择的文件信息位置

文件类型过滤器 通过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:");
    if(dlg.exec() == QFileDialog::Accepted)
    {
       QStringList lst = dlg.selectedFiles();
       for(int i=0;i<lst.length();i++)
           qDebug()<<lst[i];
    }

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

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

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()为false

bool 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(); //获取Qprinter
  QTextDocument td;
  td.setPlainText("TEST TEST TEST"); //设置文本
  //printer->setOutputFileName("D:\\1.pdf"); //设置文件路径
  td.print(printer); //打印td
}

效果:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-04-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档