Я использовал решение вопроса ниже для открытого файла на Android.
Qt / Necessitas — разумная замена QFileDialog / скин?
Но это работает только на Android, это коды (Qt Android Extras C ++ Classes) не работает на окнах?
например я получил следующие ошибки?
#include<QAndroidJniObject>
#include<QtAndroid>
#include<QAndroidActivityResultReceiver>
Не удается открыть включаемый файл: ‘QAndroidJniObject’: такого файла или каталога нет
Я использовал это для решения
#if defined(Q_OS_ANDROID)
#include<QAndroidJniObject>
#include<QtAndroid>
#include<QAndroidActivityResultReceiver>
#endif
но когда я использовал это, я получил еще одну ошибку?
class ResultReceiver:public QAndroidActivityResultReceiver//error :'QAndroidActivityResultReceiver': base class undefined
{
AndroidFileDialog *_dialog;
public:
ResultReceiver(AndroidFileDialog *dialog);
virtual ~ResultReceiver();
void handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject &data);
QString uriToPath(QAndroidJniObject uri);
};
‘QAndroidActivityResultReceiver’: базовый класс не определен
Класс ResultReceiver
наследуется QAndroidActivityResultReceiver
(из Android Extras), который вы правильно остановили, в том числе и для ОС Windows, при этом ошибка.
У вас должно быть 2 варианта ResultReceiver
класс, один для Windows, другой для Android. Когда вы разрабатываете его для Windows, вы не должны наследовать QAndroidActivityResultReceiver
и использовать QFileDialog
,
Точно так же, как вы решили import
проблемы с препроцессором Qt, вы можете определить ResultReceiver
класс, для пример:
#if defined(Q_OS_ANDROID)
class AndroidFileDialog : public QObject
{
Q_OBJECT
...
private:
class ResultReceiver : public QAndroidActivityResultReceiver {
AndroidFileDialog *_dialog;
...
};
...
...
};
#else
class ResultReceiver // Here do not inherit classes from Android Extras
{
QFileDialog *_dialog; // use standard Qt C++ classes
...
...
};
#endif //Q_OS_ANDROID
Это понятно, проект компилируется в соответствии с вашим * .pro-файлом, который включает в себя все файлы проекта. Итак, вы пытаетесь скомпилировать файлы, связанные с Android, в Windows, и вы получаете сообщение об ошибке. Вы должны включить / исключить файлы в вашем * .pro файле, в соответствии с целевой ОС, например:
SOURCES += \
common.cpp
HEADERS += \
common.h
win32 {
SOURCES += \
winfile.cpp
HEADERS += \
winfile.h
LIBS += -lwin
}
android {
SOURCES += \
androidfile.cpp
HEADERS += \
androidfile.h
LIBS += -landroid
}
и поэтому ненужные файлы не будут скомпилированы / связаны