#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, так что проблема здесь не в этом.