2016-01-02 9 views
0

Я пытаюсь использовать QDesktopServices для открытия каталога, определенного как cpath.QDesktopServices openUrl не работает

QString openPath = QDir::toNativeSeparators(cpath); 
QDesktopServices::openUrl(QUrl(cpath, QUrl::TolerantMode)); 

Однако приведенный выше код ничего не делает.

Код помещается в функцию, привязанную к кнопке с помощью connect(). Я проверил, что функция подключения работает, создав MessageBox, который открывается при нажатии кнопки.

connect(openButton, SIGNAL(clicked()), this, SLOT(OpenDirectory())); 

Код:

void QtReader::OpenDirectory() 
{ 
    QString openPath = QDir::toNativeSeparators(cpath); 
    QDesktopServices::openUrl(QUrl::fromLocalFile(qApp-ApplicationDirPath()+QDir::separator()+"ReaderArchives")); //current working code 

}

cpath декларация:

QString cpath = qApp->applicationDirPath()+QDir::separator()+"ReaderArchives"; 

Заголовочный файл

public: 
    explicit QtReader(QWidget *parent = 0); 
    ~QtReader(); 
    QString cpath, spath, tpath; 
+0

Почему вы звоните вNationalSeparators (и не используете результат)? – Ilya

+0

Как выглядит 'cpath'? Кроме того, удалите второй аргумент из конструктора 'QUrl'. –

+0

cpath - это qApp-> applicationDirPath() + QDir :: separator(). Также toNativeSeparators был тестовым кодом. – Akito

ответ

0

Вы должны убедиться, что ваш URL интерпретируется как локальный путь к файлу, попробуйте следующее:

QDesktopServices::openUrl(QUrl::fromLocalFile(cpath)); 

отмечают, что нет необходимости использовать QDir::toNativeSeparators(), преобразование выполняется автоматически таким образом.

EDIT:

Вашего декларация из cpath является причиной вашей проблемы, я не уверен, что вы имели в виду, и где вы наложив свой decleration, но я думаю, что Вы объявляете новая переменная с тем же именем cpath, которая имеет другую область видимости, а затем в вашем OpenDirectory() вы ссылаетесь на неинициализированный элемент QString cpath, который еще не был присвоен ни одному значению, поэтому опустите ваше объявление и в своем конструкторе присвойте значение в память ber cpath таким образом:

cpath = qApp->applicationDirPath()+QDir::separator()+"ReaderArchives"; 
+0

Я пробовал ваше решение, но тот же результат. Всякий раз, когда я нажимаю кнопку, папка не открывается. – Akito

+0

и нет отладочного вывода? проверьте для сообщений об ошибках – Mike

+0

это сработало для меня, когда 'cpath = qApp-> applicationDirPath()' и он открыл каталог приложения – Mike

Смежные вопросы