Qt之标准对话框
一、QFileDialog对话框
1.选择打开一个文件
若要打开一个文件,可调用静态函数QFileDialog::getOpenFileName(),打开指定的一个文件
代码示例如下:
1 2 3 4 5 6 7 8 9 10 | void MainWindow::on_btn_clicked() { QString curPath = QDir::currentPath(); //获取应用程序当前目录 QString dlgTitle = "选择一个文件" ; QString filter = "文本文件(*.txt);;图片文件(*.jpg *.gif);;所有文件(*.*)" ; QString fileName = QFileDialog::getOpenFileName( this , dlgTitle, curPath, filter); if (!fileName.isEmpty()) { qDebug() << "fileName:" << fileName; } } |
打印结果:
QFileDialog::getOpenFileName()函数需要传递3个参数,分别如下:
- 对话框标题,这个设置为“选择一个文件”。
- 初始化目录,打开对话框时的初始目录,这里使用QDir::currentPath()获取应用程序当前目录。
- 文件过滤器,设置选择不同后缀文件,可以设置多组文件,如: QString filter = "文本文件(*.txt);;图片文件(*.jpg *.gif);;所有文件(*.*)";每组文件之间用两个分号隔开,同一组内不同后缀之间用空格隔开。
QFileDialog::getOpenFileName()函数返回的是选择文件的带路径的完整文件名,如果在对话框里取消选择,则返回字符串为空。
2.选择打开多个文件
若要选择打开多个文件,可使用静态函数QFileDialog::getOpenFileNames(),打开多个文件。
示例代码如下:
1 2 3 4 5 6 7 8 9 10 | void MainWindow::on_btn_clicked() { QString curPath = QDir::currentPath(); //获取应用程序当前目录 QString dlgTitle = "选择一个文件" ; QString filter = "文本文件(*.txt);;图片文件(*.jpg *.gif);;所有文件(*.*)" ; QStringList fileList = QFileDialog::getOpenFileNames( this , dlgTitle, curPath, filter); foreach (QString fileName, fileList) { qDebug() << fileName; } } |
打印结果:
getOpenFileNames()函数的传递参数与getOpenFileName()一样,只是返回值是一个字符串列表,列表的每一行是选择的一个文件。
3.选择已有目录
选择已有目录可调用静态函数QFileDialog()::getExistingDirectory(),同样,若需要传递对话框标题和初始路径,还应该传递一个选项,一般用QFileDialog::ShowDirsOnly,表示对话框中只显示目录。
示例代码如下:
1 2 3 4 5 6 7 8 9 | void MainWindow::on_btn_clicked() { QString curPath = QCoreApplication::applicationDirPath(); QString dlgTitle = "选择一个目录" ; QString selectedDir = QFileDialog::getExistingDirectory( this , dlgTitle, curPath, QFileDialog::ShowDirsOnly); if (!selectedDir.isEmpty()) { qDebug() << selectedDir; } } |
静态函数QCoreApplication::applicationDirPath()返回应用程序可执行文件所在的目录,QFileDialog::getExistingDirectory()函数的返回值是选择的目录名称子字符串。
4.选择保存文件名
选择一个保存文件,使用静态函数QFileDialog::getSaveFileName(),传递的参数与getOpenFileName()函数相同,只是在调用getSaveFileName函数时,若选择的是一个已经存在的文件,会提示是否覆盖原有的文件,如果提示覆盖,会返回为选择的文件,但是并不会对文件进行实质操作,如下述的代码所示,即使选择覆盖文件,由于代码里没有实质的覆盖原来的文件,也不会对选择的文件造成任何影响。
1 2 3 4 5 6 7 8 9 10 | void MainWindow::on_btn_clicked() { QString curPath = QCoreApplication::applicationDirPath(); QString dlgTitle = "保存文件" ; QString filter = "h文件(*.h);;C++文件(.cpp);;所有文件(*.*)" ; QString fileName = QFileDialog::getSaveFileName( this , dlgTitle, curPath, filter); if (!fileName.isEmpty()) { qDebug() << fileName; } } |
二、QColorDialog对话框
QColorDialog是选择颜色对话框,选择颜色使用静态函数QColorDialog::getColor()。
示例代码如下:
1 2 3 4 5 6 7 8 9 10 | void MainWindow::on_btn_clicked() { QPalette pal = m_pTextEdit->palette(); //获取现有palette QColor iniColor = pal.color(QPalette::Text); //现有的文字颜色 QColor color = QColorDialog::getColor(iniColor, this , "选择颜色" ); if (color.isValid()) { pal.setColor(QPalette::Text, color); m_pTextEdit->setPalette(pal); } } |
getColor()函数需要传递一个初始的颜色,这里是将palette提取的文本颜色作为初始颜色,getColor()函数返回一个颜色变量,若在颜色对话框里取消选择,则返回的颜色值无效,通过QColor::isValid()函数来判断返回是否有效。
三、QFontDialog对话框
QFontDialog是选择字体对话框,选择字体使用静态函数QFontDialog::getFont(),字体的设置的内容包括字体名称、大小、粗体、斜体等。
代码如下所示:
1 2 3 4 5 6 7 8 9 | void MainWindow::on_btn_clicked() { QFont iniFont = m_pBtnClicked->font(); bool isValid = false ; QFont font = QFontDialog::getFont(&isValid, iniFont); if (isValid) { m_pTextEdit->setFont(font); } } |
getFont()返回一个字体变量,但是QFont没有类似于isValid()的函数来判断有效性,所以在调用getFont()函数时以引用方式传递一个逻辑变量isValid,调用后通过判断isValid是否为true来判读字体选择是否有效。
四、QInputDialog标准输入对话框
QInputDialog有单行字符串输入、整数输入、浮点数输入、列表框选择输入和多行文本等多种输入方式。
1.输入文字
QInputDialog::getText()函数显示一个对话框用于输入字符串,传递的参数包括对话框标题、提示标签文件、缺省输入、编辑框响应模式等。
代码示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 | void MainWindow::on_btn_clicked() { QString dlgTitle = "输入文字对话框" ; QString txtLabel = "请输入文件名" ; QString defaultInput = "新建文件.txt" ; QLineEdit::EchoMode echoMode = QLineEdit::Normal; bool isValid = false ; QString text = QInputDialog::getText( this , dlgTitle, txtLabel, echoMode, defaultInput, &isValid); if (isValid) { m_pTextEdit->appendPlainText(text); } } |
2.输入整数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | void MainWindow::on_btn_clicked() { QString dlgTitle = "输入文字对话框" ; QString txtLabel = "设置字体大小" ; int defaultValue = m_pTextEdit->font().pointSize(); int minValue = 6, maxValue = 50, stepValue = 1; bool isValid = false ; int inputValue = QInputDialog::getInt( this , dlgTitle, txtLabel, defaultValue, minValue, maxValue, stepValue, &isValid); if (isValid) { QFont font = m_pTextEdit->font(); font.setPointSize(inputValue); m_pTextEdit->setFont(font); } } |
输入整数对话框使用一个SpinBox组件输入整数,getInt()需要传递的参数包括数值大小范围、步长、初始值、确认选择输入后,将输入的整数值作为文本框字体的大小。
3.输入浮点数
使用QInputDialog::getDouble()函数输入一个浮点数,输入对话框使用一个QDoubleSpinBox作为输入组件,getDouble()的输入参数需要输入范围、初始值、小数点位数等。
代码如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | void MainWindow::on_btn_clicked() { QString dlgTitle = "输入文字对话框" ; QString txtLabel = "输入一个浮点数" ; float defaultValue = 3.13; float minValue = 0, maxValue = 1000; int decimals = 2; //小数点位数 bool isValid = false ; float inputValue = QInputDialog::getDouble( this , dlgTitle, txtLabel, defaultValue, minValue, maxValue, decimals, &isValid); if (isValid) { QString str = QString::asprintf( "输入了一个浮点数:%.2f" , inputValue); m_pTextEdit->appendPlainText(str); } } |
4.下拉列表选择输入
使用QInputDialog::getIntem()可以从一个ComboBox组件的下拉列表中选择输入。
代码如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | void MainWindow::on_btn_clicked() { QStringList items; items << "优秀" << "良好" << "合格" << "不合格" ; QString dlgTitle = "条目选择对话框" ; QString txtLabel = "请选择级别" ; int curIndex = 0; //初始选择项 bool editable = true ; //ComboBox是否看编辑 bool isValid = false ; QString text = QInputDialog::getItem( this , dlgTitle, txtLabel, items, curIndex, editable, &isValid); if (isValid && !text.isEmpty()) { m_pTextEdit->appendPlainText(text); } } |
getItem()函数需要一个QStringList变量为其ComboBox组件条目初始化,curIndex指明初始化选择项,editable表示对话框的ComboBox是否可编辑,若不能编辑,则只能在下拉列表中选择。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?