c++ 从FileChooserDialog GTK 3阅读多个文件

bvuwiixz  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(148)

我试图打开一个Gtkmm::FileChooserDialog来选择多个文件,并将它们的路径和文件名打印到一个标签上。我可以打开对话框并选择文件,但我很难将文件名读到我的变量中。

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)
        label.set_text(ustring::compose("File = %1", ustring(openFileDialog.get_filename())));
      return true;
mwngjboj

mwngjboj1#

您可以使用Gtk::FileChooser::get_filenames(Gtkmm 3.24):

if (openFileDialog.run() == Gtk::RESPONSE_OK)
{
  for(const auto& fileName : openFileDialog.get_filenames())
  {
    label.set_text(Glib::ustring::compose("File = %1", Glib::ustring(fileName)));
  }
}

它返回文件名的std::vector

**注意:**在我的回答中,我一直在覆盖label变量,因为它是代码片段中的所有上下文。可能你有多个标签,或者你想在一个标签中打包所有的文件名。我把这部分留给你。

相关问题