Russian Qt Forum

Qt => Вопросы новичков => Тема начата: AlekseyDL от Август 04, 2013, 14:58



Название: Как запретить QFileDialog обращаться к флопику при открытии окна?
Отправлено: AlekseyDL от Август 04, 2013, 14:58
Здравствуйте.
Помогите, пожалуйста, решить вопрос. При открытии диалога QFileDialog, сначала идет обращение к флопику, а затем открывается окно диалога. Из-за этого каждый раз имеем задержку в несколько секунд с подвисшим окном во время попытки чтения FDD.
Код:
Код:
QDir curDir;
QString criPath = curDir.absolutePath();
criPath += "/base";
QFileDialog dialog(this);
connect(&dialog, SIGNAL(fileSelected(const QString &)), this, SLOT(saveCritFile(const QString &)));
dialog.setFileMode(QFileDialog::AnyFile);
dialog.setAcceptMode(QFileDialog::AcceptSave);
dialog.setDirectory(criPath);
dialog.setNameFilter(tr("*.cri"));
dialog.exec();


Название: Re: Как запретить QFileDialog обращаться к флопику при открытии окна?
Отправлено: kambala от Август 04, 2013, 17:54
если чтение с дискеты выполняется в конструкторе диалога, например выполняй чтение после появления диалога:
Код
C++ (Qt)
QTimer::singleShot(0, this, SLOT(readFloppy()));
и можно показать какой-нибудь индикатор прогресса


Название: Re: Как запретить QFileDialog обращаться к флопику при открытии окна?
Отправлено: AlekseyDL от Август 04, 2013, 18:04
если чтение с дискеты выполняется в конструкторе диалога, например выполняй чтение после появления диалога:
Чтение конкретно с дискеты не планируется. Задача: отключить обращение к дисководу при загрузке окна. По поводу конструткора диалога, код приведен полностью - в конструкторе ничего не читается.

++

Попробовал применить вызов другого конструктора:
QDir curDir;
   QString criPath = curDir.absolutePath();
   criPath += "/base";
   QFileDialog dialog(this, "", criPath, "*.cri");
Здесь явно указываю папку откуда открывать: D:/Programms/ ...
Но все равно пробует читать дискету.


Название: Re: Как запретить QFileDialog обращаться к флопику при открытии окна?
Отправлено: kambala от Август 04, 2013, 18:43
ааааа, это прикол винды этот… а без создания объекта QDir разве нельзя обойтись? например qApp->applicationDirPath() + "/base"


Название: Re: Как запретить QFileDialog обращаться к флопику при открытии окна?
Отправлено: AlekseyDL от Август 04, 2013, 18:48
Немного разобрался. Переписал открытие фалйа по примерам из Qt.
Делаю так, код:
Код:
QDir curDir;
QString openFilesPath = curDir.absolutePath();
//openFilesPath += "/base";
QFileDialog::Options options = QFileDialog::DontUseNativeDialog;
QString selectedFilter;
QStringList files = QFileDialog::getOpenFileNames(this, tr("Open"),openFilesPath,tr("*.cri"),&selectedFilter,options);
//openFilesPath += "/base"; - если эта строка закомментирована, то флопик Не читается. Но при этом я не направляю диалог по нужному пути. Если её раскомментировать, то открывается нужный путь, но и флопик начинает читаться.

ааааа, это прикол винды этот… а без создания объекта QDir разве нельзя обойтись? например qApp->applicationDirPath() + "/base"
Попробую разобраться ).


Название: Re: Как запретить QFileDialog обращаться к флопику при открытии окна?
Отправлено: AlekseyDL от Август 04, 2013, 19:02
например qApp->applicationDirPath() + "/base"
Тот же прикол. Если пытаюсь открыть файл ниже, чем .exe - происходит обращение к флопику.


Название: Re: Как запретить QFileDialog обращаться к флопику при открытии окна?
Отправлено: Bepec от Август 04, 2013, 19:15
Правильное поведение винды. Проверяет доступность всех дисков :P


Название: Re: Как запретить QFileDialog обращаться к флопику при открытии окна?
Отправлено: AlekseyDL от Август 04, 2013, 19:22
Правильное поведение винды. Проверяет доступность всех дисков :P
Должен быть способ отменить проверку. Во многих программах диск не "тревожится" при открытии/записи файлов.


Название: Re: Как запретить QFileDialog обращаться к флопику при открытии окна?
Отправлено: Majestio от Август 04, 2013, 20:01
Правильное поведение винды. Проверяет доступность всех дисков :P

Но неправильное (https://bugreports.qt-project.org/browse/QTBUG-1892) поведение Qt  :P
Нельзя так жестоко обижать программеров!


Название: Re: Как запретить QFileDialog обращаться к флопику при открытии окна?
Отправлено: AlekseyDL от Август 05, 2013, 00:29
Люди, никто что ли не использовал QFileDialog в своих проектах и не сталкивался с этим вопросом?
Забыл указать. Версия Qt: 4.8.3


Название: Re: Как запретить QFileDialog обращаться к флопику при открытии окна?
Отправлено: kamre от Август 05, 2013, 01:48
Люди, никто что ли не использовал QFileDialog в своих проектах и не сталкивался с этим вопросом?
Скорее всего никто не пользуется флоппиками, да и cd/dvd уже тоже. Так что это какая-то экзотическая проблема.


Название: Re: Как запретить QFileDialog обращаться к флопику при открытии окна?
Отправлено: AlekseyDL от Август 05, 2013, 01:58
Люди, никто что ли не использовал QFileDialog в своих проектах и не сталкивался с этим вопросом?
Скорее всего никто не пользуется флоппиками, да и cd/dvd уже тоже. Так что это какая-то экзотическая проблема.
В смысле физически на компе не установлены флопики?


Название: Re: Как запретить QFileDialog обращаться к флопику при открытии окна?
Отправлено: Bepec от Август 05, 2013, 07:14
Йеп. Именно.


Название: Re: Как запретить QFileDialog обращаться к флопику при открытии окна?
Отправлено: AlekseyDL от Август 05, 2013, 12:26
Все же разобрался ).
Код:
Код:
QString fileName = QFileDialog::getOpenFileName(this,tr("Open files"), "./base",tr("My files (*.cri)"));
openFile(fileName);
Здесь: "./base" "точки" вначале не хватало. Теперь не нужно загонять путь извне, из-за чего возникали приколы с флопиком.

***
+
В примере используется стандартный диалог.
Если использовать нестандартный (QFileDialog::DontUseNativeDialog) - та же история.


Название: Re: Как запретить QFileDialog обращаться к флопику при открытии окна?
Отправлено: panAlexey от Август 06, 2013, 16:28
Все же разобрался ).
Код:
Код:
QString fileName = QFileDialog::getOpenFileName(this,tr("Open files"), "./base",tr("My files (*.cri)"));
openFile(fileName);
Здесь: "./base" "точки" вначале не хватало. Теперь не нужно загонять путь извне, из-за чего возникали приколы с флопиком.

***
+
В примере используется стандартный диалог.
Если использовать нестандартный (QFileDialog::DontUseNativeDialog) - та же история.

надо сказать разработчикам калигры - она запарила флопарем стучать...