文章目录
前言
本章介绍标准基本对话框的使用方法,首先介绍标准文件对话框(QFileDialog)、标准颜色对话框(QColorDialog)、标准字体对话框(QFontDialog)、标准输入对话框(QInputDialog)及标准消息对话框(QMessageBox)。
标准基本对话框所需的静态函数:
相关类 | 类说明 | 静态函数 | 函数说明 |
---|---|---|---|
QFileDialog类 | 标准文件对话框 | getOpenFileName | 获得用户选择的文件名 |
getSaveFileName | 获得用户保存的文件名 | ||
getExistingDirectory | 获得用户选择的已存在的目录名 | ||
getOpenFileNames | 获得用户选择的文件名列表 | ||
QColorDialog类 | 标准颜色对话框 | getColor | 获得用户选择的颜色值 |
QFontDialog类 | 标准字体对话框 | getFont | 获得用户选择的字体 |
QInputDialog类 | 标准输入对话框 | getText | 标准字符串输入对话框 |
getItem | 下拉表条目输入框 | ||
getInt | int类型数据输入对话框 | ||
getDouble | double类型数据输入对话框 | ||
QMessageBox类 | 标准消息对话框 | QMessageBox::question | Question消息框 |
QMessageBox::information | Information消息框 | ||
QMessageBox::warning | Warning消息框 | ||
QMessageBox::critical | Critical消息框 | ||
QMessageBox::about | About消息框 | ||
QMessageBox::aboutQt | About 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)设置自定义消息框地图标。