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
二、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);
好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***