7.14 QDialog


***【在线视频教程】***

好文章,来自【福优学苑@音视频+流媒体】

7.14 QDialog

简介

Qt 中使用 QDialog 类实现对话框,通常是设计一个类继承 QDialog。

Qt 的对话框分为模态对话框非模态对话框,即阻塞和非阻塞对话框,

而模态对话框又有两种:应用程序级别的和窗口级别的,分别指完成对话框之前阻塞整个应用和阻塞关联窗口。

好文章,来自【福优学苑@音视频+流媒体】

操作

对话框是一个顶级窗口,大多数用于临时任务和短暂交流。

QDialog可能是modal或者modeless;

QDialog还可以提供一个返回值;


(1)  Modal Dialogs


Modal Dialog可以阻塞其他窗口的输入,

Dialogs可以是application modal(默认值)或者是window modal。


绝大数调用modal dialog的方式是调用exec(),当dialog关闭的时候,exec()将会提供一个返回值。

一般将OK连接到accep()槽函数,Cancel连接到reject()槽函数。


exec() 和  open()分别为应用程序级别和窗口级别的模态对话框,

show()则为非模态对话框。


  • QDialog::show(): 非模态,非阻塞的。

  • QDialog::exec(): 模态 ,阻塞,整个系统阻塞掉。

  • QDialog::open(): 窗口模态,只会阻塞一个窗口,而不是将整个系统阻塞掉。


2、如果使用exec()默认为模态的。

如果用show()需要设置setModel(true)才是模态的。


3、exec() 是一个循环时间函数,

当调用

accept()(返回QDialog::Accepted),表示确定

reject()(返回QDialog::Rejected),表示取消

done(r)(返回r),

close()(返回QDialog::Rejected),

hide()(返回 QDialog::Rejected),

destory()(返回QDialog::Rejected)。

好文章,来自【福优学苑@音视频+流媒体】

4、销毁对象

1)调用close()并不会销毁对象,设置属性setAttribute(Qt::WA_DeleteOnClose)才会在close后销毁对象。

如果没有设置属性,则效果跟hide()、setVisible()差不多,都只是起一个隐藏作用。


好文章,来自【福优学苑@音视频+流媒体】

QMessageBox

QMessageBox是Qt编程中常用的类,使用方便。

下面给出该类的普通用法实例。


1.包含头文件

#include <QMessageBox>

如果要打印出内容,还有添加头文件<QDebug>


2.程序

QMessageBox message(QMessageBox::Warning,

"Information",

"Really to clear data?",

QMessageBox::Yes|QMessageBox::No,

NULL);

if (message.exec() == QMessageBox::Yes)

{

qDebug()<<"clicked yes\n";

}

else

{

qDebug()<<"clicked no\n";

}

好文章,来自【福优学苑@音视频+流媒体】


QFileDialog

一、综述:

操作系统一般都会提供一些列的标准对话框,如文件选择、字体选择、颜色选择等,

这些标准对话框为应用层序提供了一致的观感。

Qt对这些标准对话框都定义了相关的类,

QFileDialog、QFontDialog、QColorDialog、

QInputDialog、QMessageBox、QPrintDialog、

QErrorMessage、QProgressDialog

好文章,来自【福优学苑@音视频+流媒体】

 image.png

好文章,来自【福优学苑@音视频+流媒体】

二、QFileDialog:

1、getOpenFileName()是QFileDialog类的一个静态函数,返回用户选择的文件名,如果用户选择取消(Cancel),则返回一个空串。

函数形式如下:


QString QFileDialog::getOpenFileName( 

QWidget * parent = 0, 

const QString & caption = QString(), 

const QString & dir = QString(), 

const QString & filter = QString(), 

QString * selectedFilter = 0, 

Options options = 0 );


       调用getOpenFileName()函数将创建一个模态的文件对话框。

dir参数指定了默认的目录;

filter参数对文件系统进行过滤,只有与过滤器匹配的文件类型才显示,filter可以同时指定多种过滤方式供用户选择,多种过滤器之间用“;;”隔开,用户选择的过滤器通过参数selectedFilter返回。

好文章,来自【福优学苑@音视频+流媒体】

代码:

//定义文件对话框类

      QFileDialog *fileDialog = new QFileDialog(this);

      //定义文件对话框标题

      fileDialog->setWindowTitle(tr("打开文件"));

      //设置默认文件路径

      fileDialog->setDirectory(".");

      //设置文件过滤器

      fileDialog->setNameFilter(tr("Images(*.png *.jpg *.jpeg *.bmp)"));

      //fileDialog->setNameFilter(tr("text(*.txt)"));

      //设置可以选择多个文件,默认为只能选择一个文件QFileDialog::ExistingFiles

      fileDialog->setFileMode(QFileDialog::ExistingFiles);

      //设置视图模式

      fileDialog->setViewMode(QFileDialog::Detail);

      //打印所有选择的文件的路径

      QStringList fileNames;

      if (fileDialog->exec())

      {

        fileNames = fileDialog->selectedFiles();

      }

      for (auto tmp : fileNames)

      {

        qDebug() << tmp << endl;

      }


好文章,来自【福优学苑@音视频+流媒体】

QFontDialog

1、getFont()是QFontDialog的一个静态函数,返回用户选择的字体,函数形式如下:

QFont getFont( bool * ok, QWidget * parent = 0 );

调用getFont()函数将创建一个模态的字体对话框。

用户选择OK,参数*ok将为true,函数返回用户选择的字体,否则为false,此时函数返回默认字体。


2、代码实现

添加头文件:

#include <QFontDialog>


bool ok;

    QFont afont = QFontDialog::getFont(

                    &ok, QFont( "宋体", 10 ), this );

    if ( ok ) {

        // font被设置为用户选择的字体

        ui->label_font->setFont(afont);

    } else {

        // 用户取消这个对话框,font被设置为初始值,在这里就是(宋体, 10)

    }



好文章,来自【福优学苑@音视频+流媒体】

QColorDialog

1、getColor()是QColorDialog的一个静态函数,返回用户选择的颜色值,函数形式如下:

QColor getColor( const QColor & initial = Qt::white, QWidget * parent = 0 );

好文章,来自【福优学苑@音视频+流媒体】

调用getColor()函数将创建一个模态的颜色对话框。

initial参数制定了默认选中的颜色,默认为白色。

通过QColor::isValid()可以判断用户选择颜色是否有效,若用户选择取消(Cancel),QColor::isValid()将返回false。


2、代码实现:


QColor aColor = QColorDialog::getColor();


    QPalette apalette;

    apalette.setColor(QPalette::WindowText, aColor);


    ui->label_font->setPalette(apalette);





好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***