【Qt】QString删除后缀和部分删除的一些用法

本文介绍六种使用QString操作删除图片文件名后缀的方法,包括left、chop、replace、resize、truncate和remove等函数的应用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在导入图片的时候,想只显示名字不显示后缀,那么如何删除掉后缀呢,一起来看一下;

这边主要总结了六种方法:filename.left;filename.chop;filename.replace;filename.resize;filename.truncate;filename.remove

1. filename.left(n);取filename左边size - n长度的数据;

这边主要是去除图片.png的后缀,所以 -4,实际情况根据你要删除的进行修改

QString filename;
//“movie.png”
filename=filename.left(filename.size() -4);
//“movie”

2. filename.chop(n);从字符串filename尾部删除 n 个字符

QString filename;
//“movie.png”
filename.chop(4);
//“movie”

3. filename.replace(n,m,str);用str替换从位置 n开始长度为m的字符,

QString filename;
//“movie.png”
filename.replace(filename.size()-4,4,"");
//“movie”

4. filename.resize(n);改变字符串长度为n

QString filename;
//“movie.png”
filename.resize(filename.size()-4);
//“movie”

5. filename.truncate(n);从位置 n 处截取字符串

QString filename;
//“movie.png”
filename.truncate(filename.size()-4);
//“movie”

6. filename.remove(n, m);从位置 n 处开始删除 m 个字符

QString filename;
//“movie.png”
filename.remove(filename.size()-4,4);
//“movie”

以上就是全部内容啦,谢谢观看!

<think>我们使用C++Qt来实现一个文件对话框,用于选择.txt后缀的文件。主要使用QFileDialog::getOpenFileName函数,并设置文件过滤器为"文本文件 (*.txt)"。 步骤: 1. 包含必要的头文件:<QApplication>, <QMainWindow>, <QPushButton>, <QFileDialog>等。 2. 创建一个主窗口类,继承自QMainWindow。 3. 在主窗口中添加一个按钮,点击按钮时触发文件选择对话框。 4. 在按钮的槽函数中,调用QFileDialog::getOpenFileName,并设置过滤器。 5. 处理选择的文件路径。 注意:在C++中,我们使用双引号来定义字符串,并且注意过滤器的格式:使用两个分号(;;)来分隔不同的过滤器。 代码示例:</think># Qt 文件对话框:选择 .txt 后缀文件(C++实现) 在 Qt 中实现弹出文件选择对话框并过滤 `.txt` 后缀文件,可以使用 `QFileDialog` 类。以下是一个完整的 C++ 实现示例: ```cpp #include <QApplication> #include <QMainWindow> #include <QPushButton> #include <QFileDialog> #include <QLabel> #include <QVBoxLayout> #include <QWidget> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) { // 创建主窗口组件 QWidget *centralWidget = new QWidget(this); QVBoxLayout *layout = new QVBoxLayout(centralWidget); // 创建按钮 QPushButton *openButton = new QPushButton("选择文本文件", this); connect(openButton, &QPushButton::clicked, this, &MainWindow::openTxtFile); // 创建标签用于显示结果 filePathLabel = new QLabel("未选择文件", this); filePathLabel->setWordWrap(true); fileContentLabel = new QLabel("", this); fileContentLabel->setWordWrap(true); // 添加组件到布局 layout->addWidget(openButton); layout->addWidget(new QLabel("选择的文件路径:", this)); layout->addWidget(filePathLabel); layout->addWidget(new QLabel("文件内容:", this)); layout->addWidget(fileContentLabel); // 设置主窗口 centralWidget->setLayout(layout); setCentralWidget(centralWidget); setWindowTitle("Qt 文件对话框示例"); resize(500, 300); } private slots: void openTxtFile() { // 弹出文件选择对话框并设置.txt过滤器 QString filePath = QFileDialog::getOpenFileName( this, // 父窗口 "选择文本文件", // 对话框标题 "", // 起始目录(空表示当前目录) "文本文件 (*.txt);;所有文件 (*)" // 文件过滤器 ); if (!filePath.isEmpty()) { // 用户选择了文件(非取消操作) filePathLabel->setText(filePath); // 读取并显示文件内容 QFile file(filePath); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream in(&file); QString content = in.readAll(); fileContentLabel->setText(content); file.close(); } else { fileContentLabel->setText("无法打开文件"); } } else { filePathLabel->setText("未选择文件"); fileContentLabel->setText(""); } } private: QLabel *filePathLabel; QLabel *fileContentLabel; }; int main(int argc, char *argv[]) { QApplication app(argc, argv); MainWindow window; window.show(); return app.exec(); } #include "main.moc" // 对于包含Q_OBJECT的类需要包含moc文件 ``` ## 关键代码解析 ### 1. 文件对话框设置 ```cpp QString filePath = QFileDialog::getOpenFileName( this, // 父窗口 "选择文本文件", // 对话框标题 "", // 起始目录(空表示当前目录) "文本文件 (*.txt);;所有文件 (*)" // 文件过滤器 ); ``` - **文件过滤器**:`"文本文件 (*.txt);;所有文件 (*)"` 表示只显示 `.txt` 文件,同时提供显示所有文件的选项 - `;;` 分隔不同过滤器选项 - 如果用户点击"取消",返回的 `filePath` 为空字符串 ### 2. 文件内容读取 ```cpp QFile file(filePath); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream in(&file); QString content = in.readAll(); // 处理文件内容... file.close(); } ``` ## 文件过滤器的进阶用法 ### 同时过滤多种文本格式 ```cpp "文本文件 (*.txt);;日志文件 (*.log);;所有文件 (*)" ``` ### 设置默认目录 ```cpp QFileDialog::getOpenFileName(..., "/home/documents", ...); ``` ### 选择多个文件 ```cpp QStringList files = QFileDialog::getOpenFileNames(...); ``` ## 注意事项 1. 在 Windows/macOS/Linux 上会自动适配系统原生文件对话框 2. 过滤器语法格式:`"描述 (*.后缀1 *.后缀2);;..."`[^1] 3. 对于包含 `Q_OBJECT` 宏的类,需要包含对应的 moc 文件(如 `#include "main.moc"`) ## 文件对话框的替代方案 如果需要更复杂的文件选择界面,可以创建自定义的 `QFileDialog` 实例: ```cpp QFileDialog dialog(this); dialog.setFileMode(QFileDialog::ExistingFile); dialog.setNameFilter("文本文件 (*.txt)"); dialog.setViewMode(QFileDialog::Detail); if (dialog.exec()) { QStringList files = dialog.selectedFiles(); // 处理选择的文件 } ``` 这种方法允许更精细地控制文件对话框的行为[^1]。 [^1]: Qt 文件对话框 API 参考 [^2]: 文件过滤器语法格式说明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

logani

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值