当我使用 Qt Android Extras C++ 类 时如何防止 windows 上的错误
How prevent errors on windows when i use Qt Android Extras C++ Classes
我在 Android.
上对打开的文件使用了以下问题的解决方案
Qt/Necessitas - reasonable QFileDialog replacement/skin?
但它只适用于 android,此代码 (Qt Android Extras C++ Classes) 在 windows 上不 运行?
例如我得到以下错误?
#include<QAndroidJniObject>
#include<QtAndroid>
#include<QAndroidActivityResultReceiver>
Cannot open include file: 'QAndroidJniObject': No such file or directory
我用这个来解决
#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': base class undefined
可以理解,工程是根据你的*.pro文件编译的,包含了所有的工程文件。因此,您尝试在 Windows 上编译 Android 相关文件,因此出现错误。你应该在你的*.pro文件中include/exclude个文件,根据目标OS,例如:
SOURCES += \
common.cpp
HEADERS += \
common.h
win32 {
SOURCES += \
winfile.cpp
HEADERS += \
winfile.h
LIBS += -lwin
}
android {
SOURCES += \
androidfile.cpp
HEADERS += \
androidfile.h
LIBS += -landroid
}
所以不需要的文件不会compiled/linked
class ResultReceiver
继承了 QAndroidActivityResultReceiver
(来自 Android Extras),您正确地停止了 windows OS,因此错误。
您必须有 2 个 ResultReceiver
class 变体,一个用于 Windows,另一个用于 Android。当你为 Windows 设计时,你不应该继承 QAndroidActivityResultReceiver
而使用 QFileDialog
。
与您解决 import
Qt 预处理器问题的方式相同,您可以定义 ResultReceiver
class ,例如 example:
#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
我在 Android.
上对打开的文件使用了以下问题的解决方案Qt/Necessitas - reasonable QFileDialog replacement/skin?
但它只适用于 android,此代码 (Qt Android Extras C++ Classes) 在 windows 上不 运行?
例如我得到以下错误?
#include<QAndroidJniObject>
#include<QtAndroid>
#include<QAndroidActivityResultReceiver>
Cannot open include file: 'QAndroidJniObject': No such file or directory
我用这个来解决
#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': base class undefined
可以理解,工程是根据你的*.pro文件编译的,包含了所有的工程文件。因此,您尝试在 Windows 上编译 Android 相关文件,因此出现错误。你应该在你的*.pro文件中include/exclude个文件,根据目标OS,例如:
SOURCES += \
common.cpp
HEADERS += \
common.h
win32 {
SOURCES += \
winfile.cpp
HEADERS += \
winfile.h
LIBS += -lwin
}
android {
SOURCES += \
androidfile.cpp
HEADERS += \
androidfile.h
LIBS += -landroid
}
所以不需要的文件不会compiled/linked
class ResultReceiver
继承了 QAndroidActivityResultReceiver
(来自 Android Extras),您正确地停止了 windows OS,因此错误。
ResultReceiver
class 变体,一个用于 Windows,另一个用于 Android。当你为 Windows 设计时,你不应该继承 QAndroidActivityResultReceiver
而使用 QFileDialog
。
与您解决 import
Qt 预处理器问题的方式相同,您可以定义 ResultReceiver
class ,例如 example:
#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