首页 > 其他分享 >GTKMM 4 文件浏览对话框

GTKMM 4 文件浏览对话框

时间:2024-02-07 17:22:22浏览次数:27  
标签:浏览 text Gtk 对话框 filter add dialog GTKMM

目录

前言

  • gtkmm4 弃用了Gtk::FileChooserDialog 而引进了Gtk::FileDialog
  • 有几点需求和问题:
    • 我需要选择文件夹的对话框能连文件一起显示
    • gtkmm4 依然能使用 Gtk::FileChooserNative
    • 用本土的文件浏览对话框 还是 GTK 的
    • gtkmm3 使用Gtk::FileChooserDialog 能满足第一个需求吗

使用 Gtk::FileChooserNative

// 创建一个FileChooserNative
auto dialog = Gtk::FileChooserNative::create("Please choose a folder",
              *this,
              Gtk::FileChooser::Action::SELECT_FOLDER,
              "Choose",
              "Cancel");
//    dialog->set_transient_for(*this);
//
//    // 创建一个过滤器
auto filters = Gio::ListStore<Gtk::FileFilter>::create();
auto filter_text = Gtk::FileFilter::create();
filter_text->set_name("Any files");
//    filter_text->add_mime_type("any/any");
filter_text->add_pattern("*");
filters->append(filter_text);
dialog->add_filter(filter_text);
//    dialog->set_filter(filter_tex
// 运行对话框
dialog->show();
  • 意思是调用原生的对话框
    >.我是在winodws上开发Gtk应用,所以它提供windows风格的文件对话框
  • 但是如果行为是 Gtk::FileChooser::Action::SELECT_FOLDER 时, 上面的过滤器就不起效果, 对话框中也不会显示过滤下拉菜单选项, 也只显示文件夹

Gtk::FileDialog

  • 官网例子: https://gnome.pages.gitlab.gnome.org/gtkmm-documentation/sec-dialogs-filedialog.html
    官网例子很简单,一个文件选择(带过滤器), 一个文件夹选择(不显示文件,无过滤器,默认使用本土风格的文件对话框)
  • 我尝试在它select_folder(文件夹选择)的情况下给它加过滤器,希望它能显示文件, 于是发现了下面的 "特性"
    auto dialog = Gtk::FileDialog::create();
    auto filters = Gio::ListStore<Gtk::FileFilter>::create();
    auto filter_text = Gtk::FileFilter::create();
    filter_text->set_name("Any files");
    filter_text->add_mime_type("some mime_type balabala");
    filter_text->add_pattern("*");
    filters->append(filter_text);
    dialog->set_filters(filters);
    // Show the dialog and wait for a user response:
    dialog->select_folder(sigc::bind(sigc::mem_fun(
                                         *this, &ExampleWindow::on_folder_dialog_finish), dialog));
    
    能达到我上面的需求: 选择文件夹的对话框能连文件一起显示 是GTK风格的文件浏览对话框
    但如果注释掉add_mime_type这一行, 那么显示本土风格的对话框,而且就和上面FileChooserNative一样达不到需求

gtkmm3 使用 Gtk::FileChooserDialog

  • // 创建一个FileChooserDialog
    Gtk::FileChooserDialog dialog("Please choose a folder or file",                            Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER);
    
    // 添加“打开”按钮
    dialog.add_button("_Open", Gtk::RESPONSE_ACCEPT);
    
    // 添加“取消”按钮
    dialog.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
    
    // 设置对话框的标题
    dialog.set_title("Select Folder or File");
    
    // 设置对话框的默认文件夹
    //    dialog.set_current_folder("/path/to/default/folder");
    
    // 设置是否显示文件
    dialog.set_show_hidden(true); // 显示隐藏文件
    auto filter_text = Gtk::FileFilter::create();
    filter_text->set_name("Any files");
    filter_text->add_mime_type("text/plain");
    filter_text->add_pattern("*");
    dialog.set_filter(filter_text);    // 不使用过滤器,显示所有文件
    
    dialog.set_transient_for(*this);
    
    //Add response buttons the the dialog:
    dialog.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
    dialog.add_button("Select", Gtk::RESPONSE_OK);
    
    int result = dialog.run();
    
    //Handle the response:
    switch(result)
    {
        case(Gtk::RESPONSE_OK):
        {
            std::cout << "Select clicked." << std::endl;
            std::cout << "Folder selected: " << dialog.get_filename()
                      << std::endl;
            break;
        }
        case(Gtk::RESPONSE_CANCEL):
        {
            std::cout << "Cancel clicked." << std::endl;
            break;
        }
        default:
        {
            std::cout << "Unexpected button clicked." << std::endl;
            break;
        }
    }
    
    能达到要求, GTK风格

继承Gtk::FileChooserWidget

  • 没有尝试

标签:浏览,text,Gtk,对话框,filter,add,dialog,GTKMM
From: https://www.cnblogs.com/ComputerTech/p/18011033

相关文章

  • 5.Prism对话框IDialogAware
    案例:项目添加Prism框架引用。1.添加对话框项目,添加一个用户控件ConfigView.xaml<UserControlx:Class="ConfigModule.Views.ConfigView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.micr......
  • Windows和浏览器的命令与快捷键
    目录一、运行常用命令二、cmd常用命令(cmd的命令是运行的命令的超集)三、Windows快捷键1、Win键2、Ctrl键3、Alt键4、F键四、浏览器快捷键五、关闭Windows防火墙、安全中心和自动更新一、运行常用命令1.基本命令cmd打开命令提示符(cmd命令行控制台)control......
  • 浏览器事件循环
    根据网络课程记录的一些笔记,受益匪浅单线程是异步产生的原因事件循环是异步的实现方式浏览器运行会启动:浏览器进程网络进程渲染进程(一个标签页是一个渲染进程)某进程崩溃后,互不影响渲染进程渲染进程启动后,会开启一个渲染主线程,主线程负责执行html,css,js代码默认情况下,浏览......
  • js 基于能力检测进行浏览器分析
    虽然可能有人觉得能力检测类似于黑科技,但恰当地使用能力检测可以精准地分析运行代码的浏览器。使用能力检测而非用户代理检测的优点在于,伪造用户代理字符串很简单,而伪造能够欺骗能力检测的浏览器特性却很难。检测特性可以按照能力将浏览器归类。如果你的应用程序需要使用特定的浏......
  • js 浏览器元数据
    navigator对象暴露出一些API,可以提供浏览器和操作系统的状态信息。GeolocationAPInavigator.geolocation属性暴露了GeolocationAPI,可以让浏览器脚本感知当前设备的地理位置。这个API只在安全执行环境(通过HTTPS获取的脚本)中可用。这个API可以查询宿主系统并尽可能精确......
  • js 浏览器分析
    想要知道自己代码运行在什么浏览器上,大部分开发者会分析window.navigator.userAgent返回的字符串值。所有浏览器都会提供这个值,如果相信这些返回值并基于给定的一组浏览器检测这个字符串,最终会得到关于浏览器和操作系统的比较精确的结果。相比于能力检测,用户代理检测还是有一定......
  • 定制你的清爽Mac版Edge浏览器
    浏览器每次打开都有个烦人的提示要获取将来的microsoftedge更新,需要macos10.15或更高版本,找了很久也没有解决办法,有windows端的解决方案,有禁止更新的解决方案,就是没有Mac上如何避免这个告警的方案,于是走上Edge定制化之旅。省流直接下载下面的com.microsoft.Edge.......
  • Github登录 2FA(Two-Factor Authentication/两因素认证) 浏览器插件-已验证
    Github登录2FA(Two-FactorAuthentication/两因素认证)浏览器插件-已验证chrome装下这个扩展身份验证器https://chromewebstore.google.com/detail/身份验证器/bhghoamapcdpbohphigoooaddinpkbai?pli=1装好以后,到登录的页面,有个二维码,用这个插件扫一下就能登录了,然后就有......
  • 浏览器版本检测
    浏览器版本检测目录浏览器版本检测一、检测浏览器的内核及相应的版本1.1通用方式1.2特有方式1.2.1谷歌(Chrome)浏览器1.2.2Edge浏览器1.2.3小智双核浏览器一、检测浏览器的内核及相应的版本1.1通用方式https://ie.icoa.cn/1.2特有方式1.2.1谷歌(Chrome)浏览器chrome:......
  • 物联网浏览器(IoTBrowser)-MQTT协议集成和测试
    一、简介MQTT(消息队列遥测传输)是ISO标准(ISO/IECPRF20922)下基于发布/订阅范式的消息协议。它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件。MQTT是一个基于客户端-服务器的消息发布/订......