wxFilePickerCtrl не актуализирует виджет после установки пути

#c #wxwidgets

#c #wxwidgets

Вопрос:

У меня проблема с wxFilePickerCtrl. Я попытался задать путь с помощью метода setPath(), и это не сработало, путь задан, потому что я могу получить его из getPath() , но виджет по-прежнему отображает path (None) .

Вот мой код (упрощенный до двух классов). У вас есть какие-либо идеи, как я могу сделать это правильно? Я пробовал разные методы 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;
}
 

панель.ГЭС:

 #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();
}
 

Комментарии:

1. как вы настроили wxWidgets? Можете ли вы воспроизвести поведение в widgets dialogs примере или?

2. Я разрабатываю приложение среднего размера уже полгода, и все, кроме этой функции, работает хорошо, для установки я использовал это руководство с сайта wxWidgets: wiki.wxwidgets.org/Install#Linux

3. можете ли вы воспроизвести его в примере? Кроме того, можете ли вы опубликовать ТОЧНУЮ строку настройки?

4. Вы имеете в виду мой make-файл или мои команды из процесса установки, потому что я не уверен.

5. какая у вас версия GTK? Возможно, вы обнаружили ошибку в библиотеке… Попробуйте опубликовать на wx-users ML, чтобы узнать, получите ли вы ответ от основных разработчиков wx. Предоставьте всю приведенную выше информацию — версию wx, порт (wxGTK / Linux (Ubuntu)), версию GTK и шаги для воспроизведения в образце.

Ответ №1:

Это ограничение GTK, которое показывает только имена существующих файлов в этом элементе управления (так что это должно сработать, если ваш /some_path/main.cpp действительно существует). Я не вижу никакого способа GtkFileChooserButton показать имя файла, если оно не существует, поэтому я не думаю, что это можно исправить, к сожалению.

Вообще говоря, этот элемент управления действительно должен использоваться для загрузки существующих файлов в GTK.

Ответ №2:

Если вы хотите установить его в файл, вам необходимо использовать SetFilename

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

Комментарии:

1. Я не знаю, является ли это проблемой Linux (я пишу под Ubuntu), но в моем случае это тоже не сработало. Все еще отображается мой виджет (нет).

2. Я протестировал здесь сборку github (должна быть 3.x) в Windows, и она работает для меня. Я не вижу, для чего SetPath это нужно, потому что в примере кода они используют SetInitialDirectory("path") вместо этого, но, конечно, без имени файла.

3. Я использую wxWidgets 3.1.4, так что проблема здесь не в этом.