【问题标题】:wxFilePickerCtrl not actualizing widget after setting pathwxFilePickerCtrl 设置路径后未实现小部件
【发布时间】:2021-04-26 13:39:22
【问题描述】:

我遇到了 wxFilePickerCtrl 的问题。我尝试使用 SetPath() 方法设置路径,但它不起作用,路径已设置,因为我可以从 GetPath() 获取它,但小部件仍然显示路径(无)。

这是我的代码(简化为两个类)。你知道我该怎么做吗?我从文档中尝试了不同的 wxFilePickerCtrl 方法,但结果是一样的。

main.hpp:

#ifndef MAIN_HPP
#define MAIN_HPP

#include <wx/wx.h>

#include "panel.hpp"

    class MyApp : public wxApp
    {
        public:
            bool OnInit();

        private:
            Panel* _panel;
    };

#endif

main.cpp:

#include "main.hpp"

wxIMPLEMENT_APP(MyApp)

bool MyApp::OnInit()
{
    _panel = new Panel();
    _panel->Show(true);
    return true;
}

panel.hpp:

#ifndef PANEL_HPP
#define PANEL_HPP

#include <wx/wx.h>
#include <wx/filepicker.h>    

class Panel : public wxFrame
{
    public:
        Panel();

    private:
        wxFilePickerCtrl* _filePicker;
        wxBoxSizer* _sizer;
};      

#endif

panel.cpp:

#include "panel.hpp"

Panel::Panel() : wxFrame(NULL, wxID_ANY, "MyApp", wxDefaultPosition, wxSize(850, 450))
{
    _sizer = new wxBoxSizer(wxVERTICAL);
    _filePicker = new wxFilePickerCtrl(this, wxID_ANY, "filePicker");
    sizer->Add(_filePicker, 2, wxALIGN_CENTER, 2);
    //file does not matter so in examplie I tried to set to main.cpp
    _filePicker->SetPath("/some_path/main.cpp"); 
    this->SetSizer(_sizer);
    this->Centre();
}

【问题讨论】:

  • 你是如何配置 wxWidgets 的?你能重现widgetsdialogs 示例中的行为吗?
  • 我正在开发一个中型应用程序半年了,除了这个功能之外的所有东西都运行良好,安装时我使用了 wxWidgets 网站的这个指南:wiki.wxwidgets.org/Install#Linux
  • 你能在样本中重现它吗?另外,您可以发布您的确切配置行吗?
  • 你的意思是我的make文件还是我安装过程中的命令,因为我不确定。
  • 你的 GTK 版本是什么?也许您在库中发现了一个错误...尝试在 wx-users ML 上发帖,看看您是否得到核心 wx-devs 的回复。提供以上所有信息 - wx 版本、端口 (wxGTK/Linux(Ubuntu))、GTK 版本以及在示例中重现的步骤。

标签: c++ wxwidgets


【解决方案1】:

这是a GTK limitation,它仅显示此控件中现有文件的名称(因此,如果您的/some_path/main.cpp 确实存在,这应该可以工作)。如果文件名不存在,我看不出有任何方法可以让GtkFileChooserButton 显示文件名,所以很遗憾,我认为这无法修复。

一般来说,这个控件确实应该用于加载 GTK 中的现有文件。

【讨论】:

    【解决方案2】:

    如果要将其设置为文件,则必须使用SetFilename

    wxFileName fn = "C:/src/wxWidgets.dev/samples/widgets/native.cpp";
    filePicker->SetFileName(fn);
    

    【讨论】:

    • 我不知道这是否是 Linux 问题(我在 Ubuntu 下编码),但在我的情况下它也不起作用。我的小部件仍然显示(无)。
    • 我在这里针对 Windows 上的 github 构建(应该是 3.x)进行了测试,它对我有用。我看不出SetPath 的真正用途,因为在示例代码中他们使用的是SetInitialDirectory("path"),但当然没有文件名。
    • 我使用的是 wxWidgets 3.1.4 所以这里不是问题。
    猜你喜欢
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多