Russian Qt Forum
Ноябрь 25, 2024, 22:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Проблем с функцией QFileDialog::getOpenFileName, при нестабильной работе сети  (Прочитано 31887 раз)
AD
Гость
« : Сентябрь 28, 2009, 15:16 »

Я когда-то задавал подобный вопрос, приемлемого решения не нашлось на тот момент. Но теперь проблема стала снова и серьезно.

Дело в том, что при использовании функции getOpenFileName в стандартном виде:
Код
C++ (Qt)
QFileDialog::getOpenFileName(<object>, <text>, <directory>,
                       <filter_files>));
 
То эта функция лезет в сетевое окружение. Если сервер сети в данный момент не работает, то вывод окошка замедляется, а то и совсем зависает. Дело в том, что программа начинают с выбора загружаемых лог-файлов, а соответственно с этого окна. Но если сервера (и основной и резервный) в данный момент недоступны, то прога зависает и это окошко не появляется. Какими флагами, шаманствами и прочим можно заставить эту функцию не лезть в сетевое окружение???

Сделал для функций следующие обертки. Не особо помогло. Чуть быстрее открывается, но задержка есть. Пока полного зависания не наблюдалось, но задержка раздражает:
Код
C++ (Qt)
QString getOpenFileName(QWidget* parent = 0, const QString& caption = QString(""),
const QString& directory = QString(""), const QString& filter = QString(""));
QStringList getOpenFileNames(QWidget* parent = 0, const QString& caption = QString(""),
const QString& directory = QString(""), const QString& filter = QString(""));

Код
C++ (Qt)
/// Вызов окна диалога для выбора открываемого файла
QString getOpenFileName(QWidget* parent, const QString& caption, const QString& directory,
const QString& filter)
{
QFileDialog file_dialog(parent, caption, directory, filter);
file_dialog.setViewMode(QFileDialog::Detail);
file_dialog.setResolveSymlinks(false);
file_dialog.setFileMode(QFileDialog::ExistingFile);
if(!file_dialog.exec())
return QString("");
 
return file_dialog.selectedFile();
}
 
/// Вызов окна диалога для выбора открываемых файлов
QStringList getOpenFileNames(QWidget* parent, const QString& caption, const QString& directory,
const QString& filter)
{
QFileDialog file_dialog(parent, caption, directory, filter);
file_dialog.setViewMode(QFileDialog::Detail);
file_dialog.setResolveSymlinks(false);
file_dialog.setFileMode(QFileDialog::ExistingFiles);
if(!file_dialog.exec())
return QStringList();
 
return file_dialog.selectedFiles();
}
Не слишком помогло. Буду благодарен за помощь!!!
Записан
shadone
Гость
« Ответ #1 : Сентябрь 29, 2009, 12:19 »

QFileDialog::getOpenFileName показывает родной диалог открытия файлов. Вряд ли тут что-то можно сделать. Я так понимаю точно также "тормозят" любые другие (не-Qt) приложения показывающие родные диалоги?
Записан
BaltikS
Гость
« Ответ #2 : Сентябрь 29, 2009, 12:21 »

Можно ещё предложить пингануть сервак перед открытием окошка.... Улыбающийся
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Сентябрь 29, 2009, 16:21 »

>>Можно ещё предложить пингануть сервак перед открытием окошка....
А толку-то, ну отвалилися он, а окошко-то всё равно открывать.
Записан

Юра.
BaltikS
Гость
« Ответ #4 : Сентябрь 29, 2009, 18:00 »

>>Можно ещё предложить пингануть сервак перед открытием окошка....
А толку-то, ну отвалилися он, а окошко-то всё равно открывать.
Я так понял она как раз таки с сервака и открывает файлы....
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Сентябрь 29, 2009, 18:11 »

Нет, просто из-за сетевого окружения, диалог открытия файлов задумывается
Записан

Юра.
AD
Гость
« Ответ #6 : Сентябрь 29, 2009, 21:11 »

QFileDialog::getOpenFileName показывает родной диалог открытия файлов. Вряд ли тут что-то можно сделать. Я так понимаю точно также "тормозят" любые другие (не-Qt) приложения показывающие родные диалоги?
Да, тормозят. По крайней мере, MFC-шное тоже задумывается... Так использую неродное уже ведь. Использую Qt-шное....
« Последнее редактирование: Сентябрь 29, 2009, 21:14 от AD » Записан
BlackTass
Гость
« Ответ #7 : Сентябрь 30, 2009, 07:51 »

дак Qt то в свою очередь использует родной диалог)
Записан
CroCIV
Гость
« Ответ #8 : Сентябрь 30, 2009, 07:54 »

Почитай про уровни модели OSI тебе все станет понятнее http://www.citforum.ru/nets/switche/osi.shtml . Таким образом и Qt и любое другое не мелокмягкое решение будет тормозить, если, конечно, оно не работает сразу на 3-4 уровне OSI. На сколько я знаю есть у мелкомягких такая переменная управляющая временем ожидания ответа от сетевого интерфейса, но тут есть но, если в сети наблюдается систематический недоперепинг, то с коротким временем ожидания система вероятнее руганется об недоступности удаленного хоста, а он может и прощупался бы, еслиб подождали подольше. И вообще СаМБа - это зло. Помоему на виндовс 7 используется уже другой протокол, и мб там такой беды не будет.  
Записан
AD
Гость
« Ответ #9 : Сентябрь 30, 2009, 17:46 »

Думаю, что все-таки есть решение этой проблемы. Ведь не тормозит точно абсолютно такое же окошко, что при вызове статической функции getOpenFileNames(), при открытии нового документа Word, Excel! Только что проверил - моментальное открытие.
« Последнее редактирование: Сентябрь 30, 2009, 17:49 от AD » Записан
AD
Гость
« Ответ #10 : Октябрь 02, 2009, 16:20 »

Не удается найти решение. А просто как воздух необходимо...
Помогите, пожалуйста! Этот стандартный диалог в Word, Excel, Power Point открывается моментально - это ведь значит, что проблему можно вылечить? Уже весь ассистент перелистал в поисках решения...
Записан
shadone
Гость
« Ответ #11 : Октябрь 02, 2009, 17:27 »

Не удается найти решение. А просто как воздух необходимо...
Помогите, пожалуйста! Этот стандартный диалог в Word, Excel, Power Point открывается моментально - это ведь значит, что проблему можно вылечить? Уже весь ассистент перелистал в поисках решения...
Assistant ничем не поможет, особенно учитывая что диалог в MFC тоже тормозит при открытии. Решение я вижу только одно - найти как работают Word/Excel/etc, что они делают особенного что диалог открывается моментально и послать патч в Qt Development Frameworks который исправит проблему.
Записан
Alp
Гость
« Ответ #12 : Октябрь 03, 2009, 11:30 »

Думаю, что все-таки есть решение этой проблемы. Ведь не тормозит точно абсолютно такое же окошко, что при вызове статической функции getOpenFileNames(), при открытии нового документа Word, Excel! Только что проверил - моментальное открытие.
К сожалению, нет офиса на компьютере, не могу проверить. Есть ли гарантия, что ворд/эксель открывают стандартный диалог выбора файла, а не реализуют его самостоятельно с тем же видом?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #13 : Октябрь 03, 2009, 11:35 »

Так использую неродное уже ведь. Использую Qt-шное....

Можешь отдебажить ход создания Qt-шного диалога и глянуть где проблема (метод, функция, этц). Код-то открыт
« Последнее редактирование: Октябрь 03, 2009, 11:37 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Октябрь 03, 2009, 12:43 »

Есть ли гарантия, что ворд/эксель открывают стандартный диалог выбора файла, а не реализуют его самостоятельно с тем же видом?
Да, в отладчике можно увидеть как свора стандартных dll подгружается при открытии.

У меня была проблема на слабенькой машине тормозил сетевой диск. Выкрутился отключив <filters>, пришлось открывать "anyFile". Хотя это может совсем не тот случай. Сочувствую.
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.348 секунд. Запросов: 23.