当我使用Qt Android Extras C ++ Classes时,如何防止Windows上的错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当我使用Qt Android Extras C ++ Classes时,如何防止Windows上的错误相关的知识,希望对你有一定的参考价值。

我在android上使用了以下问题的解决方案来打开文件。

Qt/Necessitas - reasonable QFileDialog replacement/skin?

但它只适用于Android,这些代码(Qt Android Extras C++ Classes)不能在Windows上运行?

例如我有以下错误?

#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操作系统,因此错误。

You must have 2 variants of ResultReceiver class, one for Windows, another for Android. When you design it for Windows you should not inherit QAndroidActivityResultReceiver and use QFileDialog. In the same way you solved the import issues with Qt pre-processor, you could define ResultReceiver class , for 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
另一答案

这是可以理解的,项目是根据您的* .pro文件编译的,该文件包含所有项目文件。因此,您尝试在Windows上编译Android相关文件,因此您会收到错误。您应该根据目标操作系统在* .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
}

因此不会编译/链接不必要的文件

以上是关于当我使用Qt Android Extras C ++ Classes时,如何防止Windows上的错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Qt/C++ 小部件(不是 QML)从 Android 相机获取图像

Qt for Android之Hello World

QT学习-核心类列表-39QtX11Extras 40QtXml

QT 5.1.1 android打包错误

Android Hello World Qt 5.2

java [Intent Extras to String]转换Intent的Extras为可读的String #Android