zoukankan      html  css  js  c++  java
  • 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()为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
    }

    效果:

     

  • 相关阅读:
    yii2 页面渲染方法解析
    JavaScript 编码小技巧
    Ansible Playbooks入门介绍
    CentOS 7 源码安装Ansible 2.x
    GitLab 安装与入门
    SpringBoot 悲观锁 与 乐观锁
    SpringBoot 事务隔离性和传播性
    SpringBoot 定义通过字段验证
    SpringBoot 密码MD5加密
    SpringBoot MockMVC
  • 原文地址:https://www.cnblogs.com/lifexy/p/8940991.html
Copyright © 2011-2022 走看看