Диалоговое окно Qt File не открывается в песочнице в Mac OS

У меня есть приложение для Mac OS, разработанное на Qt. Я использовал следующие коды для запуска диалогового окна открытия и сохранения файла:

//opening
QString fileName = QFileDialog::getOpenFileName(this,
    tr("Open"), "", tr("*.ext"));

//saving
QString fileName = QFileDialog::getSaveFileName(this,
    tr("Save"), "filename", tr("*.ext"));

Код отлично работает, когда приложение не находится в песочнице. Но когда я помещаю его в песочницу для распространения в Mac App Store, код не работает. Приложение просто зависает на мгновение. Любая помощь?


person Mika    schedule 29.11.2012    source источник
comment
Какую версию Qt вы используете?   -  person Kamil Klimek    schedule 30.11.2012
comment
Я загрузил последнюю офлайн-версию для Mac, в которой написано QtSDK 1.2.1. Когда я его установил, на экране «О программе» написано: Qt Creator 2.4.1 на основе Qt 4.7.4 (64-разрядная версия).   -  person Mika    schedule 30.11.2012
comment
Но какую версию вы используете для компиляции своего программного обеспечения.   -  person Kamil Klimek    schedule 30.11.2012
comment
Вы получаете какой-нибудь вывод на стандартный вывод?   -  person Kamil Klimek    schedule 30.11.2012


Ответы (2)


Эта статья должна быть полезной http://www.digia.com/en/Blogs/Qt-blog/Pasi_Matilainen/Dates/2012/4/How-to-Publish-Qt-Applications-in-the-Mac-App-Store/

tldr;

Вам необходимо использовать Qt 4.8.1 для публикации в Mac App Store

Использование диалогов сохранения файлов в песочнице

Диалог сохранения файла требует непустого имени файла по умолчанию для правильной работы внутри песочницы. Вы можете указать имя файла по умолчанию в диалоговом окне сохранения следующим образом:

QString fileSavePath = QFileDialog::getSaveFileName(this, "Save file", "default filename");

Или, если вы сами создаете экземпляр диалога:

QFileDialog *fileSaveDialog = new QFileDialog(this);
fileSaveDialog->setAcceptMode(QFileDialog::AcceptSave);
fileSaveDialog->selectFile("default filename");

Диалоги открытия файлов не требуют специальной настройки для правильной работы.

Но я думаю, вам стоит прочитать всю статью, чтобы ничего не пропустить

person Kamil Klimek    schedule 30.11.2012
comment
Так что вы, вероятно, не используете Qt 4.8.1. Уже есть событие Qt 4.8.3. Обновите свой фреймворк - person Kamil Klimek; 30.11.2012
comment
Когда я использую SDK для обновления, он говорит, что все компоненты обновлены, но компилятор по-прежнему 4.8.1. Я полагаю, это ошибка, и мне нужно обновить ее вручную? - person Mika; 30.11.2012
comment
@Mika Добавьте `QMessageBox :: information (NULL, QString (), QString :: fromLatin1 (qVersion ()));` в свой main после экземпляра QApplication и скажите мне, что он говорит. - person Kamil Klimek; 30.11.2012
comment
возможно, попробуйте обновиться до Qt 4.8.3 - person Kamil Klimek; 30.11.2012

В песочнице вы должны использовать NSOpenPanel и NSSavePanel, чтобы получить права на разные файлы или каталоги.

Взгляните на Powerbox и доступ к файловой системе за пределами вашего контейнера.

person usain    schedule 29.11.2012
comment
Приложение разработано на Qt, поэтому мне потребуются альтернативы Qt. - person Mika; 29.11.2012