Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ намертво виснет QFileDialog::getSaveFileName

Автор: Yura 28.7.2009, 22:18

OS linux ubuntu, qt 4.5.2, IDE NetBeans 6.7

есть слот:
Код:

void MainWidget::SlotSaveGraphic() {
    QString str = QFileDialog::getSaveFileName(0, "Сохранить график", "", "Images (*.png *.xpm *.jpg)");
}

слот соединен с кнопкой. При нажатии виснет программа намертво. Наблюдается именно в NetBeans 6.7 под линуксом.
Если компилирую через QDevelop или "ручками" (qmake -project, qmake, make) то всё работает и нечего не виснет... пользователю предлагается ввести имя файла.
Пробовал компилировать в NetBeans 6.7 под виндой - тоже всё отлично работает.
непонятно почему при вызове SlotSaveGraphic() программа виснет именно когда компилирую в среде NetBeans под линуксом
???

Автор: kwisp 29.7.2009, 9:12

Yura,
думаю если интересно,
надо код getSaveFileName
в библиотеке.

Автор: Yura 29.7.2009, 17:18

Цитата(kwisp @ 29.7.2009, 10:12) *
думаю если интересно,
надо код getSaveFileName
в библиотеке.



не понял тебя

Автор: Litkevich Yuriy 29.7.2009, 17:42

Цитата(Yura @ 29.7.2009, 21:18) *
не понял тебя
+1 :)

Автор: kwisp 29.7.2009, 23:00

Цитата(Litkevich Yuriy @ 29.7.2009, 18:42) *
+1 :)

-1
что не понятного надо код функции смотреть...
как это я умудрился целое слово пропустить.

Автор: Yura 30.7.2009, 6:37

ну вот:


QString QFileDialog::getSaveFileName(QWidget *parent,
                                     const QString &caption,
                                     const QString &dir,
                                     const QString &filter,
                                     QString *selectedFilter,
                                     Options options)
{
    if (qt_filedialog_save_filename_hook)
        return qt_filedialog_save_filename_hook(parent, caption, dir, filter, selectedFilter, options);
    QFileDialogArgs args;
    args.parent = parent;
    args.caption = caption;
    args.directory = QFileDialogPrivate::workingDirectory(dir);
    args.selection = QFileDialogPrivate::initialSelection(dir);
    args.filter = filter;
    args.mode = AnyFile;
    args.options = options;

#if defined(Q_WS_WIN)
    if (qt_use_native_dialogs && !(args.options & DontUseNativeDialog)) {
        return qt_win_get_save_file_name(args, &(args.directory), selectedFilter);
    }
#endif

    // create a qt dialog
    QFileDialog dialog(args);
    dialog.setAcceptMode(AcceptSave);
    if (selectedFilter)
        dialog.selectNameFilter(*selectedFilter);
    if (dialog.exec() == QDialog::Accepted) {
        if (selectedFilter)
            *selectedFilter = dialog.selectedFilter();
        return dialog.selectedFiles().value(0);
    }

    return QString();
}



только что это даст?

Автор: Litkevich Yuriy 30.7.2009, 6:54

Цитата(Yura @ 29.7.2009, 2:18) *
При нажатии виснет программа намертво. Наблюдается именно в NetBeans 6.7 под линуксом.
а программу ты запускаешь из файлового мэнеджера или из NetBeans?

Автор: kwisp 30.7.2009, 9:11

теперь надо последовательно смотреть что эта функция использует и как это зависит от компилятора. по-просту нужно найти всякие #ifndef #ifdef в функциях использованных в getSaveFileName.
это такое знакомство с исходниками. :)

Автор: Litkevich Yuriy 30.7.2009, 10:24

kwisp, NetBeans - это же IDE, а не компилятор.
Как он может учитываться в исходнике Qt?

Автор: kwisp 30.7.2009, 11:04

Litkevich Yuriy,
ну к примеру ключик сборки в опциях компилятора, либо версия компилятора, стоит где-нибудь или галочка. я не утверждаю просто предполагаю.это все, если Yurе, верить на слово и разница только в этом.



а вообще, можно еще сайт этой самой IDE посетить, может баг какой есть???
поискать в багах Qt функцию getSaveFileName.

Автор: Гость_Yura_* 31.7.2009, 7:55

Всё верно это баг http://www.netbeans.org/issues/show_bug.cgi?id=167660
обновился до версии 6.7.1, проблема исчезла
в версии 6.7 проблема решается так:снять галку в project properties->Profile->Profile On Run.

Автор: kwisp 31.7.2009, 8:10

если честно я себе уже хочу на листочке написать и на монитор прибить гвоздем:
"Вася, если что - то не работает, посети прежде всего страницу проекта и багтрекер проекта!"
очень часто такая штуковина происходит.

если бы шеф узнал что я у себя в проге около недели пытался утечки(или нерациональное использование) памяти найти, а на самом деле причина поедания памяти WebKit он бы был очень огорчен....

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)