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

问题描述 投票:-1回答:2

我在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':基类未定义

android c++ qt c++11 qtandroidextras
2个回答
2
投票

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

1
投票

这是可以理解的,项目是根据您的* .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
}

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

© www.soinside.com 2019 - 2024. All rights reserved.