Как предотвратить ошибки в Windows, когда я использую Qt Android Extras C ++ Classes

Я использовал решение вопроса ниже для открытого файла на 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’: базовый класс не определен

-1

Решение

Класс 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
2

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

Это понятно, проект компилируется в соответствии с вашим * .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
}

и поэтому ненужные файлы не будут скомпилированы / связаны

1

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