如何在GTK 3的Gtkmm::FileChooserDialog中读取多文件路径
解决Gtkmm多文件选择后读取路径的问题
你的代码已开启多文件选择模式,但错误使用了get_filename()方法——这个方法仅返回单个选中文件的路径,要获取多个文件的路径,需改用get_filenames(),它会返回包含所有选中文件路径的std::vector<Glib::ustring>容器。
修改后的代码如下:
FileChooserDialog openFileDialog("", FILE_CHOOSER_ACTION_OPEN); openFileDialog.add_button("Cancel", RESPONSE_CANCEL); openFileDialog.add_button("Open", RESPONSE_OK); openFileDialog.set_current_folder(ustring::compose("%1/Desktop", ustring(getenv("HOME")))); openFileDialog.set_transient_for(*this); openFileDialog.set_select_multiple(true); Glib::RefPtr<Gtk::FileFilter> fileFilter = Gtk::FileFilter::create(); fileFilter->set_name("Text Files (*.txt)"); fileFilter->add_pattern("*.txt"); openFileDialog.add_filter(fileFilter); fileFilter = Gtk::FileFilter::create(); fileFilter->set_name("All Files (*.*)"); fileFilter->add_pattern("*.*"); openFileDialog.add_filter(fileFilter); if (openFileDialog.run() == RESPONSE_OK) { // 获取所有选中的文件路径 std::vector<Glib::ustring> filePaths = openFileDialog.get_filenames(); Glib::ustring displayText; // 拼接所有文件路径,用换行分隔 for (const auto& path : filePaths) { // 若仅需显示文件名,替换为Glib::path_get_basename(path) displayText += path + "\n"; } label.set_text(Glib::ustring::compose("Selected Files:\n%1", displayText)); } return true;
关键修改说明:
- 用
get_filenames()替代get_filename()获取多文件路径集合 - 遍历路径容器,将所有路径拼接成适合展示的文本格式
- 可选调整:用
Glib::path_get_basename()提取纯文件名,替代完整路径展示
内容的提问来源于stack exchange,提问作者user19095524
相关产品推荐
相关产品推荐

