13,008
回編集
548行目: | 548行目: | ||
<br> | <br> | ||
<code>Q_ARG</code>マクロは、Qtのシグナル / スロットシステムと密接に関連しており、Qtプログラミングにおいて柔軟なメソッド呼び出しを実現するための重要なツールの1つである。<br> | <code>Q_ARG</code>マクロは、Qtのシグナル / スロットシステムと密接に関連しており、Qtプログラミングにおいて柔軟なメソッド呼び出しを実現するための重要なツールの1つである。<br> | ||
<br><br> | |||
== プラットフォームに関するマクロ == | |||
* Q_OS_WINDOWS | |||
* Q_OS_LINUX | |||
* Q_OS_MACOS | |||
* Q_OS_IOS | |||
* Q_OS_ANDROID | |||
<br> | |||
上記のマクロは、特定のOS向けのコードを条件付きでコンパイルするために使用する。<br> | |||
OS固有の機能や最適化を実装する場合に、ソースコードの可読性を保ちながら異なるOS向けの処理を記述することができる。<br> | |||
<br> | |||
使用例としては、以下に示すようなケースが考えられる。<br> | |||
* ファイルシステムのパス区切り文字の違いに対応する。 | |||
* OS固有のAPIを使用する。 | |||
* GUIの外観や振る舞いをプラットフォームに合わせて調整する。 | |||
* デバイス固有の機能 (例: iOSやAndroidのセンサ) にアクセスする。 | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
// PlatformSpecificWidget.hファイル | |||
#include <QApplication> | |||
#include <QWidget> | |||
#include <QPushButton> | |||
#include <QVBoxLayout> | |||
#include <QDebug> | |||
class PlatformSpecificWidget : public QWidget | |||
{ | |||
public: | |||
PlatformSpecificWidget(QWidget *parent = nullptr) : QWidget(parent) | |||
{ | |||
QVBoxLayout *layout = new QVBoxLayout(this); | |||
QPushButton *button = new QPushButton("Click me", this); | |||
layout->addWidget(button); | |||
connect(button, &QPushButton::clicked, this, &PlatformSpecificWidget::onButtonClicked); | |||
} | |||
private slots: | |||
void onButtonClicked() | |||
{ | |||
#if defined(Q_OS_WINDOWS) | |||
qDebug() << "Hello from Windows!"; | |||
// Windows固有のAPI呼び出し等を記述 | |||
#elif defined(Q_OS_LINUX) | |||
qDebug() << "Hello from Linux!"; | |||
// Linux固有の処理を記述 | |||
#elif defined(Q_OS_MACOS) | |||
qDebug() << "Hello from macOS!"; | |||
// MacOS固有の処理を記述 | |||
#elif defined(Q_OS_IOS) | |||
qDebug() << "Hello from iOS!"; | |||
// iOS固有の処理を記述 | |||
#elif defined(Q_OS_ANDROID) | |||
qDebug() << "Hello from Android!"; | |||
// Android固有の処理を記述 | |||
#else | |||
qDebug() << "Hello from an unknown platform!"; | |||
#endif | |||
// プラットフォーム共通の処理 | |||
qDebug() << "This code runs on all platforms."; | |||
} | |||
}; | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
// main.cppファイル | |||
#include "PlatformSpecificWidget.h" | |||
int main(int argc, char *argv[]) | |||
{ | |||
QApplication app(argc, argv); | |||
PlatformSpecificWidget widget; | |||
widget.show(); | |||
return app.exec(); | |||
} | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||