349 字
1 分钟
【QT】对话框与常用控件
2026-06-11

标准对话框#

QFileDialog#

打开单个文件#

QString QFileDialog::getOpenFileName(
QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = nullptr,
QFileDialog::Options options = Options()
);
参数说明
parent父窗口
caption标题
dir初始目录
filter过滤器;多组用 ;; 分隔,同组多后缀用空格,如 文本(*.txt);;图片(*.jpg *.png)
selectedFilter用户选中的过滤器(可选)
返回值选中文件路径;取消则为空字符串
void Dialog::on_btnOpen_clicked()
{
QString curPath = QDir::currentPath();
QString dlgTitle = "选择一个文件";
QString filter = "文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)";
QString fileName = QFileDialog::getOpenFileName(this, dlgTitle, curPath, filter);
if (!fileName.isEmpty())
ui->plainTextEdit->appendPlainText(fileName);
}

打开多个文件#

QStringList files = QFileDialog::getOpenFileNames(
this, "选择多个文件", QDir::homePath(), "文本(*.txt);;所有(*.*)");

保存文件#

QString path = QFileDialog::getSaveFileName(
this, "保存", QDir::currentPath(), "文本(*.txt);;所有(*.*)");
if (!path.isEmpty()) {
// 写入文件
}

选择已有目录#

QString QFileDialog::getExistingDirectory(
QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
QFileDialog::Options options = ShowDirsOnly
);
QString dir = QFileDialog::getExistingDirectory(
this, "选择目录", QDir::homePath(), QFileDialog::ShowDirsOnly);

QColorDialog#

QColor color = QColorDialog::getColor(Qt::white, this, "选择颜色");
if (color.isValid())
ui->widget->setStyleSheet(QString("background:%1").arg(color.name()));

QFontDialog#

bool ok;
QFont font = QFontDialog::getFont(&ok, QFont("微软雅黑", 12), this);
if (ok)
ui->label->setFont(font);

QInputDialog#

QString text = QInputDialog::getText(this, "输入", "姓名:");
int n = QInputDialog::getInt(this, "输入", "数量:", 1, 0, 100, 1);
double d = QInputDialog::getDouble(this, "输入", "比例:", 0.5, 0, 1, 2);
QString item = QInputDialog::getItem(this, "选择", "城市:",
{"北京", "上海", "广州"}, 0, false);

QMessageBox#

QMessageBox::information(this, "提示", "操作成功");
QMessageBox::warning(this, "警告", "磁盘空间不足");
QMessageBox::critical(this, "错误", "无法打开文件");
auto ret = QMessageBox::question(this, "确认", "确定删除?",
QMessageBox::Yes | QMessageBox::No);
if (ret == QMessageBox::Yes) { /* ... */ }
// 自定义按钮
QMessageBox box(this);
box.setWindowTitle("退出");
box.setText("是否保存?");
box.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
box.setDefaultButton(QMessageBox::Save);

常用控件分类(Designer 面板)#

Buttons#

控件说明
QPushButton普通按钮
QToolButton工具栏按钮,可带菜单
QRadioButton单选,同组互斥
QCheckBox复选框
QCommandLinkButton向导式大按钮

Input Widgets#

控件说明
QLineEdit单行文本
QTextEdit / QPlainTextEdit多行富文本 / 纯文本
QSpinBox / QDoubleSpinBox整数 / 浮点调节
QComboBox下拉框
QDateEdit / QTimeEdit / QDateTimeEdit日期时间
QSlider / QDial滑块 / 旋钮

Display Widgets#

控件说明
QLabel文本或图片
QLCDNumber数码管显示
QProgressBar进度条

Containers#

控件说明
QGroupBox分组框
QTabWidget选项卡
QStackedWidget多页堆叠,一次显示一页
QScrollArea可滚动区域
QMdiAreaMDI 子窗口区域
QToolBox工具箱式折叠页

Item Views(Model-Based)#

数据与视图分离,适合大数据量:

控件常用模型
QListViewQStringListModelQStandardItemModel
QTreeView树形 QStandardItemModel
QTableViewQSqlTableModelQStandardItemModel
QColumnView列式导航

Item Widgets(Item-Based)#

项直接挂在控件上,适合少量静态数据:

控件说明
QListWidget列表
QTreeWidget
QTableWidget表格

与 .ui 文件配合#

Designer 生成的 ui_*.h 提供 setupUi(this),控件通过 ui->objectName 访问。槽函数命名 on_<objectName>_<signal>() 可被 QMetaObject::connectSlotsByName 自动连接(需在含 Q_OBJECT 的类中)。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

【QT】对话框与常用控件
https://lysj.work/posts/studynotes/qt/qt对话框与常用控件/
作者
Sekiro
发布于
2026-06-11
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录