【问题标题】:Example of gtkmm 4 FileChooserNative codegtkmm 4 FileChooserNative 代码示例
【发布时间】:2021-10-12 01:42:46
【问题描述】:

我找不到使用Gtk::FileChooserNative 的代码示例来帮助我了解如何使用这个类。来自here 的文档没有那么有用。

我的目标是创建一个打开本机文件选择器对话框的函数,并在用户选择文件夹后,将文件夹的路径打印到终端中。

当我尝试编译时:

void MyWindow::on_button_browse_clicked()
{
    Gtk::FileChooserNative dialog ("Please choose a folder", 
                                   Gtk::FileChooser::Action::SELECT_FOLDER,
                                   "Choose",
                                   "Cancel");
}

我收到以下错误:

error: calling a protected constructor of class 'Gtk::FileChooserNative'

如何创建Gtk::FileChooserNative

【问题讨论】:

  • 关于这个:“我也是 gtkmm 的新手”,请参阅我的回答 here 以获取有关互联网上 Gtkmm 的文档。

标签: c++ gtkmm gtkmm4


【解决方案1】:

我这里没有 Gtkmm 4,但是从您发布的文档来看,您似乎需要使用 factory method 而不是构造函数来创建这样的对话框:

static Glib::RefPtr<FileChooserNative> Gtk::FileChooserNative::create(
        const Glib::ustring& title,
        Window&              parent,
        FileChooser::Action  action,
        const Glib::ustring& accept_label = {},
        const Glib::ustring& cancel_label = {} 
)

在你的情况下,类似于:

void MyWindow::on_button_browse_clicked()
{
    auto dialog = Gtk::FileChooserNative::create("Please choose a folder",  
                                                 *this,    
                                                 Gtk::FileChooser::Action::SELECT_FOLDER ,
                                                 "Choose",
                                                 "Cancel");

    dialog->show();
}

【讨论】:

  • 成功了! (你在“*this”后面漏掉了“,”)看了之后答案就很明显了……
  • 昨天我很高兴看到本机文件选择器对话框完全忘记了第二部分 - 将所选文件夹的路径打印到终端中。我试图自己解决这个问题,但又被卡住了:(如果我使用示例中的代码developer-old.gnome.org/gtkmm-tutorial/4.0/…)dialog-&gt;signal_response().connect(sigc::bind(sigc::mem_fun(*this, &amp;MyWindow::on_folder_dialog_response), dialog)); 我在 gtkmm4 文件中遇到很多“函数模板专业化的实例化”错误。
  • 这里是 build log ,这里是 the code of app 我尝试构建。
  • 我认为如果您为此提出一个单独的问题会更好,并添加一个最小且可重现的示例来演示您的问题(您可以包含错误)。这个问题似乎是关于无法构造文件选择器对象,最好不要混合。如果您提出另一个问题,我很乐意看看!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多