gpt4 book ai didi

c++ - Qt:将 native 操作系统特定代码添加到项目

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:28 25 4
gpt4 key购买 nike

我的项目是一个用 C++ 编写的 Qt 应用程序,可在 Windows、OS X 和 Linux 上运行。 Qt 的抽象中没有涵盖某个区域:迭代桌面上事件的其他应用程序窗口,并返回它们的名称、它们的“句柄”和图标。

我有特定于操作系统的代码来执行此操作。

Windows 上的纯 Win32/C++OS X 上的 Objective-C和一些用于 linux 的 X11 c++ 代码

我想构建自己的抽象,利用那些特定于操作系统的 native 片段为其提供所需的运行时数据。

所以,我必须构建 Objective-C 代码并在我的 OS X 构建中运行带 Windows 的 Win32/c++与 Linux 类似

让我们专注于 Mac,只是为了这个例子。如何将 Objective-C 类组合到我的 Qt C++ 项目中?我如何从 C++ 中调用它?是否有任何示例可以让我了解它是如何完成的?

理想情况下,我希望在项目中包含特定于操作系统的代码,而不是构建要链接的单独的共享库,尽管如果别无他法,这是一个选项。

最佳答案

我想我会在这种情况下创建共享库。不管怎样,我要提出的是一个想法,但应该可行。

通过使用 qmake 功能,我会为每个平台创建一个具有不同配置的 pro 文件,其中每个配置(CONFIG 变量)包含不同的源(这是如果你不想使用简单的 ifdef。我通常做的是在不同的 cpp 文件中为每个平台创建一个通用的头文件和不同的实现。例如:

/* platformaspecific.h */
class PlatformSpecific : public QObject
{
PlatformSpecific(QObject* parent = 0);
QList<void*> getHandleForWindows(...);
void doSomethingPlatformIndependent();
...
};

/* platformspecific_x11.cpp */
PlatformSpecific::PlatformSpecific(QObject* parent) : QObject(parent)
{
...
}

PlatformSpecific::getHandleForWindows(...)
{
...
}

...

/* platformspecific_win.cpp */
PlatformSpecific::PlatformSpecific(QObject* parent) : QObject(parent)
{
...
}

QList<void*> PlatformSpecific::getHandleForWindows(...)
{
...
}

/* platformspecific_common.cpp (if needed) */
void PlatformSpecific::doSomethingPlatformIndependent()

...

等等……

然后,在您的 .pro 文件中,您使用不同的范围并根据相关的 CONFIG 包含源文件。

CONFIG += X11

X11 {
SOURCES += platformspecific_x11.cpp
}
else:WIN {
SOURCES += platformspecific_win.cpp
}
...

SOURCES += platformspecific_common.cpp

在此之后,对于包含 Objective-C 的部分,您将不得不使用 Objective-C++。你可以很容易地将 C++ 和 Objective-C 与 Objective-C++ 混合使用,只有一些事情是不允许的,比如用 Objective-C 扩展 C++ 类等等......你可以在苹果开发中心。我不知道使用 Qt Creator 在 Objective-C++ 中编程有多好,但无论如何您始终可以使用 qmake 从 .pro 文件创建 Xcode 项目:阅读此 http://doc.qt.io/archives/qt-4.7/qtmac-as-native.html#development-tools .

通过使用这种方法或类似的方法,工作起来应该会很舒服。

关于c++ - Qt:将 native 操作系统特定代码添加到项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7772756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com