对话框是 GUI 程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件都必须放在对话框中设置。对话框通常会是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。所谓标准对话框,是 Qt 内置的一系列对话框,用于简化开发。事实上,有很多对话框都是通用的,比如打开文件、设置颜色、打印设置等。这些对话框在所有程序中几乎相同。
Qt常用的内置对话框有QFileDialog、QColorDialog、QFontDialog、QInputDialog和QMessageBox。下面对这些对话框做一些简单示例。
对话框类 |
说明 |
静态函数 |
函数说明 |
QFileDialog |
文件对话框 |
getOpenFileName() |
选择打开一个文件 |
getOpenFileNames() |
选择打开多个文件 |
||
getSaveFileName() |
选择保存一个文件 |
||
getExistingDirectory() |
选择一个己有的目录 |
||
getOpenFileUrl() |
选择打幵一个文件,可选择远程网络文件 |
||
QColorDialog |
颜色对话框 |
getColor() |
选择颜色 |
QFontDialog |
字体对话框 |
QFont getFont() |
选择字体 |
QInputDialog |
输入对话框 |
getText() |
输入单行文字 |
getlnt() |
输入整数 |
||
getDouble() |
输入浮点数 |
||
getltem() |
从一个下拉列表框中选择输入 |
||
getMultiLineText() |
输入多行字符串 |
||
QMessageBox |
消息框 |
information() |
信息提示对话框 |
question() |
询问并获取是否确认的对话框 |
||
waming() |
警告信息提示对话框 |
||
critical() |
错误信息提示对话框 |
||
about() |
设置自定义信息的关于对话框 |
||
aboutQt() |
关于Qt的对话框 |
QFileDialog文件对话框
文件对话框可以通过调用QFileDialog::getOpenFileName方法实现,方法的第一个参数指定窗体的父窗体、第二个参数指定窗体的标题、第三个参数指定窗体的打开目录、第四个参数用于限定打开的文件类型,有多个类型时中间用;;隔开。下面程序演示了当用户点击按钮后会弹出文件对话框,之后将用户选择的文件路劲显示在文本框中。
//文件对话框
void Dialog::ShowFileDlg()
{
//打开文件对话框
//函数返回打开的路径
QString sPath = QFileDialog::getOpenFileName(
this,//指定父窗口
"标准文件对话框",//打开文件对话框的标题
".",//打开目录,"." 表示当前目录
"C++ files(*.cpp);;"
"C files(*.c);;"
"Header files(*.h)"//设置文件过滤器,有多个条件时中间以两个;;隔开
);
m_fileEdit->setText(sPath);
}
m_fileEdit是一个QLineEdit部件名,用来显示用户打开文件的路径。
QColorDialog颜色对话框
颜色对话框可以通过调用QColorDialog::getColor方法实现,方法的第一个参数表示默认选择的颜色。该方法会返回一个颜色类。
void Dialog::ShowColorDlg()
{
QColor color = QColorDialog::getColor(
Qt::yellow//默认选择的颜色
);
//判断颜色选择是否合法
if(color.isValid()){
//设置边宽颜色
m_colorFrame->setPalette(QPalette(color));
}
}
m_colorFram是一个QFrame类型,用来展示用户选择的颜色
QFontDialog字体对话框
字体对话框可以通过调用QFontDialog::getFont方法实现,该方法需要传入一个bool类型的参数用来接收函数是否成功执行,方法会返回一个字体字体类。
//字体对话框
void Dialog::ShowFontDlg()
{
bool ok;//接收函数是否执行成功
QFont font = QFontDialog::getFont(
&ok//接收函数是否执行成功
);
if(ok){
//设置字体
m_fontEdit->setFont(font);
}
}
m_fontEdit是一个QLineEdit类型,用来展示用户选择的字体效果
QInputDialog输入对话框
设置姓名,可以调用的是QInputDialog::getText( )方法用来获取输入的单行文本。方法的第一个参数指定父窗体,第二个参数指定对话框的标题,第三个参数指定对话框显示的内容,第四个参数纸档输入框的模式,第五个参数指定默认值,第六个参数是一个bool类型用来接收函数是否执行成功。
//文本输入对话框
void InputDlg::editName(){
bool ok;
QString strName = QInputDialog::getText(
this,//指定父窗体
"标准文本输入对话框",//指定对话框标题
"请编辑姓名",//提示字符串
QLineEdit::Normal,//输入框显示模式
m_nameLabel->text(),//输入框的默认文本
&ok//接收函数调用是否成功
//最后一个参数表示窗体风格,这里采用默认的
);
if(ok && !strName.isEmpty()){
m_nameLabel->setText(strName);
}
}
设置性别,可以调用的是QInputDialog::getItem( ) 方法用来获取用户从下拉列表选择的值。QInputDialog第三个参数用来设置下拉列表框,要传入一个QStringList类型的值。
//条目输入对话框
void InputDlg::editSex(){
QStringList sexList;
bool ok;
sexList<<"男"<<"女"<<"未知";
//可选项是QString 类型,接收也是QString
QString strSex = QInputDialog::getItem(
this,
"标准条目输入对话框",//指定对话框标题
"请选择性别", //指定显示内容
sexList,//设置可选项,可选项是一个QStringList类型
0,//设置默认选选项
false,//是否可编辑
&ok//接收函数是否调用成功
);
if(ok && !strSex.isEmpty()){
m_sexLabel->setText(strSex);
}
}
设置年龄,可以调用QInputDialog::getInt方法用来获取用户填入的整数值。getInt方法的第四个参数和第五个参数分别用来设置整数的最小值和最大值,第六个参数用来设置步长,即点击增加按钮时每次增加的值。
void InputDlg::editAge(){
bool ok;
int age = QInputDialog::getInt(
this,
"标注int数据类型输入对话框",//对话框标题
"请编辑年龄",//对话框显示的内容
m_ageLabel->text().toInt(),//默认值
0,//最小值
120,//最大值
1,//步长
&ok//接收函数是否调用成功
);
if(ok){
m_ageLabel->setText(QString("%1").arg(age));
}
}
设置分数,可以调用QInputDialog::getDouble方法用来获取用户填入的浮点数值。getDouble方法的第四个参数和第五个参数分别用来设置整数的最小值和最大值,第六个参数用来设置精度,即点数据的小数位。
void InputDlg::editScore(){
bool ok;
double score = QInputDialog::getDouble(
this,//设置父窗体
"标准double数据类型输入对话框",//对话框标题
"请编辑分数",//对话框显示的内容
m_scoreLabel->text().toDouble(),//默认值
0,//最小值
100,//最大值
1,//精度
&ok//接收函数是否执行成功
);
if(ok){
m_scoreLabel->setText(QString::number(score));
}
}
QMessageBox消息框
问题消息框,可以调用QMessageBox::question() 显示问题消息框,问题消息框可设置要显示的按钮,方法会返回一个枚举类型表示用户所点击的按钮。这里设置的是“确定”和“取消”按钮。
void MsgBoxDlg::showQuestionMsgDlg() {
m_tipLabel->setText("问题消息框");
int res = QMessageBox::question(
this,//指定父窗体
"问题消息框",//指定标题
"已打开问题消息框,是否关闭?",//显示的文本
QMessageBox::Ok|QMessageBox::Cancel,//标注按钮
QMessageBox::Ok//默认选择的按钮
);
switch (res) {
case QMessageBox::Ok:
m_tipLabel->setText("问题消息框 - 确定");
break;
case QMessageBox::Cancel:
m_tipLabel->setText("问题消息框 - 取消");
break;
default:
break;
}
}
信息消息框,可以调用QMessageBox::information( )方法实现,信息消息框的作用是给用户展示一段消息,无需用户做出操作,函数参数也比较简单。
void MsgBoxDlg::showInformationMsgDlg() {
m_tipLabel->setText("信息消息框");
QMessageBox::information(
this,//父窗体
"信息提示框",//标题
"这是个信息提示框"//文本内容
);
}
警告消息框,可以调用QMessageBox::waring方法,警告消息框同样可以设置消息框的按钮,方法会一个枚举类型表示用户的操作。这里设置的是“保存”、“忽视”和“取消”按钮。
void MsgBoxDlg::showWarningMsgDlg() {
m_tipLabel->setText("警告消息框");
int res = QMessageBox::warning(
this,//父窗体
"警告消息框",//标题
"有为保存的文件",//警告内容
QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,
QMessageBox::Save//默认选择的按钮
);
switch (res) {
case QMessageBox::Save:
m_tipLabel->setText("警告提示框 - 保存");
break;
case QMessageBox::Discard:
m_tipLabel->setText("警告提示框 - 忽视");
break;
case QMessageBox::Cancel:
m_tipLabel->setText("警告提示框 - 取消");
break;
default:
break;
}
}
错误消息框,可以调用QMessageBox::critical方法,错误消息框也相当于一种消息提醒,会比信息消息框的效果显目,调用方法和信息消息框类似。
void MsgBoxDlg::showCriticalMsgDlg() {
m_tipLabel->setText("错误消息框");
QMessageBox::critical(
this,//父窗体
"错误消息框",//标题
"发生重大错误!!"//显示内容
);
}
关于消息框,调用QMessageBox::about方法,关于消息框也是一种消息提醒,调用方法与信息消息框类似。
void MsgBoxDlg::showAboutMsgDlg() {
m_tipLabel->setText("关于消息框");
QMessageBox::about(
this,//父窗体
"关于消息框",//标题
"这是个关于休斯顿的信息"//显示内容
);
}
关于QT消息框,调用QMessageBox::aboutQt方法,关于QT消息框会弹出一个有关QT的信息。其他功能暂无。
void MsgBoxDlg::showAboutQtMsgDlg() {
m_tipLabel->setText("关于QT消息框");
QMessageBox::aboutQt(
this,//父窗体
"关于QT消息框"//标题
);
}
自定义消息框
自定义消息框设置了一个图标和三个按钮,其中两个按钮采用自定义形式,另一个按钮采用标准形式,当用户点击按钮后,从对话框中获取用户点击的按钮,然后显示出对应的文本。
文章来源:https://www.toymoban.com/news/detail-418978.html
//自定义消息框
void Dialog::ShowCustomDlg() {
m_customLabel->setText("自定义消息框");
QMessageBox customMsgBox;
customMsgBox.setWindowTitle("自定义消息框");
//返回一个按钮对象
//自定义按钮
QPushButton *yes = customMsgBox.addButton(
"真的吗?",//指定文本
QMessageBox::ActionRole//指定角色
);
//自定义按钮
QPushButton *no = customMsgBox.addButton(
"假的",//指定文本
QMessageBox::ActionRole//指定角色
);
//标准按钮
QPushButton *cancel = customMsgBox.addButton(
QMessageBox::Cancel);
//设置图标
customMsgBox.setIconPixmap(QPixmap("msg.jpg"));
customMsgBox.exec();
if(customMsgBox.clickedButton()==yes){
m_customLabel->setText("点了“真的吗?”");
}else if(customMsgBox.clickedButton()==no){
m_customLabel->setText("点了“假的 ”");
}else if(customMsgBox.clickedButton()==cancel){
m_customLabel->setText("点了“取消”");
}
}
追风赶月莫停留,平芜尽处是春山!!!文章来源地址https://www.toymoban.com/news/detail-418978.html
到了这里,关于QT—5种标准对话框使用详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!