QFileDialog :: getOpenFileName вылетает при отладке, по-видимому, вызвано именем проекта?

Я столкнулся с проблемой, которая действительно смущает меня. Я использую Qt Creator 3.1.2, с Qt 5.3 на Windows 7, использую компилятор MSVC 10.0 и CDB из Debugging Tools for Windows 8.1. (Не уверен, стоит ли искать отладчик для Windows 7, но до сих пор у меня не было проблем).

Проблема: когда я пытаюсь использовать QFileDialog :: getOpenFileName () во время отладки, программа выдает исключение.

Низший остановился, потому что это вызвало исключение.

Остановлен в потоке 0 по: Исключение в 0x745f7736, код: 0xc0000005: нарушение доступа для чтения в: 0x0, флаги = 0x0 (первый шанс).

Выпуск / отладка сборки не имеет значения. Если я запускаю отладчик, он вылетает. Если я не, это работает. Я попробовал кучу разных вещей, чтобы выяснить, почему это происходит — я переместил getOpenFileName в другую часть программы, я попытался изменить / удалить параметры при вызове функции, я сократил в основном весь мой код, кроме Минимальный минимум, необходимый для отображения этого диалогового окна файла — QApplication и главное окно, которое вызывало getOpenFileName () при нажатии на элемент меню. Ничего не получалось.

Затем я создал новый проект, который был в основном тем же самым. Необъяснимо-это сработало. Так что потом я много разобрался и копировал вещи из моего основного проекта, пока он снова не рухнул, и в итоге я обнаружил проблему: по-видимому, это имя исполняемого файла, заданное параметром «TARGET» в файле .pro. Если установлено PrimeWorldEditor (имя моего приложения), происходит сбой. Если я изменю это на что-то еще, это работает.

Поэтому моей первой мыслью было то, что были оставшиеся файлы, которые делятся своим именем с исполняемым файлом где-то, что вызывает проблемы. Однако очистка папки сборки, перестройка проекта и все остальное не помогает.

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

РЕДАКТИРОВАТЬ: несколько человек просят код, так что вот пример программы, которая дает сбой. Еще раз, это происходит сбой только при запуске отладчика с целевым именем исполняемого файла, установленным в PrimeWorldEditor. При других обстоятельствах он работает должным образом и открывает диалоговое окно getOpenFileName ().

#include <QApplication>
#include <QFileDialog>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFileDialog::getOpenFileName();
return 0;
}

Я думаю, что проблема, скорее всего, связана с моей настройкой, поэтому я не уверен, что ее легко воспроизвести.

РЕДАКТИРОВАТЬ 2: Я хочу добавить, что я потратил некоторое время Googling, чтобы попытаться найти любую информацию, связанную с этой проблемой. Я нашел пару человек, которые, казалось, имели ту же проблему, что и я, как этот пост, но на этих постах не было никаких решений.

3

Решение

У меня была та же проблема, и решением было удалить программу git, которая сделала контекстное меню в проводнике Windows.

У меня возникла проблема, что программа зависала в отладчике Visual Studio 2013 при использовании QFileDialog::getOpenFileName():

Доступ к нарушению при чтении позиции 0xFEEEFEEE

Он не вылетал, когда я запускал программу без отладчика или когда я устанавливал параметр контекста объединения в конфигурации проекта -> отладчик ->
объединить с окружающей средой = «Нет».

Я переустановил Visual Studio, Qt и ничего не помогло.

Наконец, я удалил установленное в тот же день git-программное обеспечение и удалил его; затем программа перестала работать в Debugger.

Я использую 64-битный компьютер с Windows, но запускаю 32-битную программу Qt. У программного обеспечения git было контекстное меню в проводнике Windows, и это как-то мешало QFileDialog и вызвал проблему.

2

Другие решения

Уххххх ты хорошо По какой-то причине я заметил DropboxExt_24 в моем стеке вызовов. Поэтому я удалил приложение Dropbox, и вдруг все работает правильно. Переустановил его, и все по-прежнему работает, так что проблема решена, я думаю?

Я размещал свой код на Dropbox, чтобы сохранить его резервную копию, не уверенный, было ли это связано с проблемой или нет.

1

По вопросам рекламы [email protected]