QT5开发及实例学习之八基本对话框(一)


前言

  本章介绍标准基本对话框的使用方法,首先介绍标准文件对话框(QFileDialog)、标准颜色对话框(QColorDialog)、标准字体对话框(QFontDialog)、标准输入对话框(QInputDialog)及标准消息对话框(QMessageBox)。
标准基本对话框所需的静态函数:

相关类类说明静态函数函数说明
QFileDialog类标准文件对话框getOpenFileName获得用户选择的文件名
getSaveFileName获得用户保存的文件名
getExistingDirectory获得用户选择的已存在的目录名
getOpenFileNames获得用户选择的文件名列表
QColorDialog类标准颜色对话框getColor获得用户选择的颜色值
QFontDialog类标准字体对话框getFont获得用户选择的字体
QInputDialog类标准输入对话框getText标准字符串输入对话框
getItem下拉表条目输入框
getIntint类型数据输入对话框
getDoubledouble类型数据输入对话框
QMessageBox类标准消息对话框QMessageBox::questionQuestion消息框
QMessageBox::informationInformation消息框
QMessageBox::warningWarning消息框
QMessageBox::criticalCritical消息框
QMessageBox::aboutAbout消息框
QMessageBox::aboutQtAbout Qt消息框

一、标准文件对话框类

  getOpenFileName()静态函数返回用户选择的文件名;当用户选择文件时,若选择“取消”,则返回一个空串。该静态函数各参数的作用(其他文件对话框类中相关的静态函数的参数类似):
函数形式如下:

QString QFileDialog::getOpenFileName
(
	QWidget * parent=0,					//标准文件对话框的父窗口
	const QString & caption=QString(),	//标准文件对话框的标题名
	const QString & dir=QString(),		//指定了默认的目录,若此参数带有文件名,则文件将是默认选中的文件
	const QString & filter=QString(),	//此参数对文件类型进行过滤,只有与过滤器匹配的文件类型才显示,可以同时指定多种过滤方式供用户选择,多种过滤器之间用";;"隔开
	QString * selectedFilter=0,			//用户选择的过滤器通过此参数返回
	Options options=0					//选择显示文件名的格式,默认是同时显示目录与文件名
)

二、标准颜色对话框类

  getColor()函数是标准颜色对话框QColorDialog类的一个静态函数,该函数返回用户选择的颜色值。
函数形式:

QColor getColor
(
	const QColor& initial=Qt::white,	//指定了默认选中的颜色,默认为白色;通过QColor::isValid()函数可以判断用户选择的颜色是否有效;当用户选择颜色时,如果选择“取消”,则QColor::isValid()函数将返回false
	QWidget* parent=0					//标准颜色对话框的父窗口
)

三、标准字体对话框类

  getFont()函数是标准字体对话框QFontDialog类的一个静态函数,该函数返回用户所选择的字体。
函数形式:

QFont getFont
(
	bool* ok,			//若用户单击"OK"按钮,则该参数*ok将设为true,函数返回用户所选择的字体;否则,将设为false;此时函数返回默认字体
	QWidget* parent=0	//标准字体对话框的父窗口
)

四、标准输入对话框类

1.标准字符串输入对话框

  标准字符串输入对话框通过QInputDialog类的静态函数getText()完成;
函数形式:

QString getText
(
	QWidget* parent,			//标准输入对话框的父窗口
	const QString& title,		//标准输入对话框的标题名
	const QString& label,		//标准输入对话框的标签提示
	QLineEdit::EchoMode mode=QLineEdit::Normal,	//指定标准输入对话框中QLineEdit控件的输入模式
	const QString& text=QString(),				//标准字符串输入对话框弹出时QLineEdit控件中默认出现的文字
	bool* ok=0,					//若用户单击"OK"按钮,则该参数*ok将设为true;否则,将设为false
	Qt::WindowFlags flags=0		//指明标准输入对话框的窗体标识
)

2.标准条目选择对话框

  标准条目选择对话框是通过QInputDialog类的静态函数getItem()来完成的;
函数形式:

QString getItem
(
	QWidget* parent,			//标准输入对话框的父窗口
	const QString& title,		//标准输入对话框的标题名
	const QString& label;		//标准输入对话框的标签提示
	const QStringList& items,	//指定标准输入对话框中QComboBox控件显示的可选条目为一个QStringList对象
	int current=0,				//标准条目选择对话框弹出时QComboBox控件中默认显示的条目序号
	bool editable=true,			//指定QComboBox控件中显示的文字是否可编辑
	bool* ok=0;					//若用户单击"OK"按钮,则该参数*ok将设为true;否则,将设为false
	Qt::WindowFlags flags=0		//指明标准输入对话框的窗体标识
)

3.标准int类型输入对话框

  标准int类型输入对话框是通过QInputDialog类的静态函数getInt()来完成的;
函数形式:

int getInt
(
	QWidget* parent,		//标准输入对话框的父窗口
	const QString& title,	//标准输入对话框的标题名
	const QString& label;	//标准输入对话框的标签提示
	int value=0,			//指定标准输入对话框中QSpinBox控件默认显示值
	int min=-2147483647,	//指定QSpinBox控件的数值范围
	int max=2147483647,
	int step=1,				//指定QSpinBox控件的步进值
	bool* ok=0;				//若用户单击"OK"按钮,则该参数*ok将设为true;否则,将设为false
	Qt::WindowFlags flags=0	//指明标准输入对话框的窗体标识
)

4.标准double类型输入对话框

  标准double类型输入对话框是通过QInputDialog类的静态函数getDouble()来完成的;
函数形式:

double getDouble
(
	QWidget* parent,		//标准输入对话框的父窗口
	const QString& title,	//标准输入对话框的标题名
	const QString& label;	//标准输入对话框的标签提示
	double value=0,			//指定标准输入对话框中QSpinBox控件默认显示值
	double min=-2147483647,	//指定QSpinBox控件的数值范围
	double max=2147483647,
	int decimals=1,			//指定QSpinBox控件的步进值
	bool* ok=0;				//若用户单击"OK"按钮,则该参数*ok将设为true;否则,将设为false
	Qt::WindowFlags flags=0	//指明标准输入对话框的窗体标识
)

五、消息对话框类

  Qt提供了QMessageBox类,实现各种各样的消息框来为用户提供一些提示或提醒。
  常用消息对话框包括Question消息框、Information消息框、Warning消息框、Critical消息框、About(关于)消息框、About(关于)Qt消息框及Custom(自定义)消息框。

1.Question消息框

  Question消息框使用QMessageBox::question()函数完成;
函数形式:

StandardButton QMessageBox::question
(
	QWidget* parent,		//消息框的父窗口指针
	const QString& title,	//消息框的标题栏
	const QString& text,	//消息框的文字提示信息
	StandardButtons buttons=Ok,				//注(1)
	StandardButton defaultButton=NoButton	//默认按钮,即消息框出现时,焦点默认处于哪个按钮上
);
注:(1)填写希望在消息框中出现的按钮,可根据需要在标准按钮中选择,用"|"连写,默认为QMessageBox::Ok;
		QMessageBox类提供了许多标准按钮,如QMessageBox::Ok、QMessageBox::Close、QMessageBox::Discard等;
		虽然可以选择,但不能随意选择,应注意按常规成对出现,如:Save与Discard成对、Abort与Retry与Ignore成对。

2.Information消息框

  Information消息框使用QMessageBox::information()函数完成;
函数形式:

StandardButton QMessageBox::information
(
	QWidget* parent,		//消息框的父窗口指针
	const QString& title,	//消息框的标题栏
	const QString& text,	//消息框的文字提示信息
	StandardButtons buttons=Ok,				//注(1)
	StandardButton defaultButton=NoButton	//默认按钮,即消息框出现时,焦点默认处于哪个按钮上
);

3.Warning消息框

  Warning消息框使用QMessageBox::warning()函数完成;
函数形式:

StandardButton QMessageBox::warning
(
	QWidget* parent,		//消息框的父窗口指针
	const QString& title,	//消息框的标题栏
	const QString& text,	//消息框的文字提示信息
	StandardButtons buttons=Ok,				//注(1)
	StandardButton defaultButton=NoButton	//默认按钮,即消息框出现时,焦点默认处于哪个按钮上
);

4.Critical消息框

  Cricital消息框使用QMessageBox::critical()函数完成;
函数形式:

StandardButton QMessageBox::critical
(
	QWidget* parent,		//消息框的父窗口指针
	const QString& title,	//消息框的标题栏
	const QString& text,	//消息框的文字提示信息
	StandardButtons buttons=Ok,				//注(1)
	StandardButton defaultButton=NoButton	//默认按钮,即消息框出现时,焦点默认处于哪个按钮上
);

5.About消息框

  About消息框使用MessageBox::about()函数完成;
函数形式:

void QMessageBox::about
(
	QWidget* parent,		//消息框的父窗口指针
	const QString& title,	//消息框的标题栏
	const QString& text		//消息框的文字提示信息
);

6.About Qt消息框

  About Qt消息框使用QMessageBox::aboutQt()函数完成;
函数形式:

void QMessageBox::aboutQt
(
	QWidget* parent,				//消息框的父窗口指针
	const QString& title=QString()	//消息框的标题栏
);

六、自定义消息框

  以上所有消息框都不能满足开发的需求时,Qt还允许自定义(Custom)消息框。对消息框的图标、按钮和内容等都可根据需要进行设定。
示例:

void Dialog::showCustomDlg()
{
    label->setText(QObject::tr("Custom Message Box"));
    QMessageBox customMsgBox;
    customMsgBox.setWindowTitle(QObject::tr("自定义消息框"));
    QPushButton *yesBtn = customMsgBox.addButton(QObject::tr("Yes"), QMessageBox::ActionRole);	//(a)
    QPushButton *noBtn = customMsgBox.addButton(QObject::tr("No"), QMessageBox::ActionRole);
    QPushButton *cancelBtn = customMsgBox.addButton(QMessageBox::Cancel);	//(b)
    customMsgBox.setText(QObject::tr("这是一个自定义消息框"));				//(c)
    customMsgBox.setIconPixmap(QPixmap("Qt.png"));							//(d)
    customMsgBox.exec();
    if(customMsgBox.clickedButton() == yesBtn)
        label->setText(QObject::tr("Custom Message Box/Yes"));
    if(customMsgBox.clickedButton() == noBtn)
        label->setText(QObject::tr("Custom Message Box/No"));
    if(customMsgBox.clickedButton() == cancelBtn)
        label->setText(QObject::tr("Custom Message Box/Cancel"));
    return;
}

(a)定义消息所需的按钮,由于QMessageBox::standardButtons只提供了常用的一些按钮,并不能满足所有应用的需求,故QMessageBox类提供了一个addButton()函数来为消息框增加自定义的按钮,addButton()函数第1个参数为按钮显示的文字,第2个参数为按钮类型的描述。
(b)addButton()函数加入一个标准按钮。消息框将会按调用addButton()函数的先后顺序在消息框中由左至右地依次插入按钮。
(c)设置自定义消息框中显示的提示信息。
(d)设置自定义消息框地图标。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值