Не получается получить имя файла в gtkmm (виджет FileChooserButton)

224
26 ноября 2016, 19:08
Gtk::FileChooserButton *chooserButton = nullptr;
std::string idChooserButton = commonArray[b]["id"];
builder->get_widget(idChooserButton, chooserButton);
Php::call("var_dump",chooserButton);
if (strcmp(commonArray[b]["action"], "click") == 0) {
    Php::Value callback = commonArray[b]["callback"];
    chooserButton->signal_selection_changed().connect(
            sigc::bind<Php::Value,Php::Value>(
                    sigc::mem_fun(*this, &ParserGtk::callbacks),
                    callback,
                    chooserButton->get_filename()
            )
    );
}

Это мой код, когда я выбираю файл срабатывает callback, но функция get_filename возвращает пустую строку ""

Answer 1

В общем, в моём случае я пытался вызвать get_filename во время выполнения сигнала. Надо просто вызвать get_filename в callback функции. В общем код преобрёл следующий вид:

 chooserButton->signal_file_set().connect(
                sigc::bind<Php::Value,Gtk::FileChooserButton*>(
                        sigc::mem_fun(*this, &ParserGtk::chooserButtonCallback),
                        callbackChooser,
                        chooserButton
                )
        );

и callback функция

/**
 * choooser button special  callback
 * @param callback php callback function
 * @param chooserButton gtk filechooserbutton object
 */
void ParserGtk::chooserButtonCallback(Php::Value callback, Gtk::FileChooserButton *chooserButton) {
    Php::call("var_dump",chooserButton->get_filename());
    callback(chooserButton->get_filename());
}
READ ALSO
Не выводит имя двоечника

Не выводит имя двоечника

должно вывести фамилию Shevcenko но не работает не могу разобраться

176
Сколько разделов может быть в ОС

Сколько разделов может быть в ОС

Использовал функцию GetLogicalDevices и возник вопрос, сколько может быть логических разделов в Windows? 26 - как и количество букв в английском языке...

196
Множественное наследование и VC++

Множественное наследование и VC++

В ходе дискуссии пришли к такой программе:

187
Ошибка с памятью в перегрузке оператора

Ошибка с памятью в перегрузке оператора

Есть вот такая перегрузка оператора ++ (постфиксная)

204