You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 05:15:20