12,788
回編集
(→概要) |
|||
44行目: | 44行目: | ||
<br> | <br> | ||
以下の例では、動的ライブラリとしてQMLの<code>Window</code>コンポーネントを作成している。<br> | 以下の例では、動的ライブラリとしてQMLの<code>Window</code>コンポーネントを作成している。<br> | ||
<syntaxhighlight lang="cmake"> | |||
# CMakeLists.txtファイル | |||
# ...略 | |||
project(LibSample LANGUAGES CXX) | |||
set(CMAKE_CXX_STANDARD 17) | |||
set(CMAKE_CXX_STANDARD_REQUIRED ON) | |||
set(CMAKE_AUTOMOC ON) | |||
find_package(Qt6 REQUIRED COMPONENTS Core Quick) | |||
add_library(LibSample SHARED | |||
LibSample_global.h | |||
LibSample.cpp | |||
LibSample.h | |||
) | |||
target_link_libraries(LibSample PRIVATE | |||
Qt6::Core | |||
Qt6::Quick | |||
) | |||
qt_add_qml_module(LibSample | |||
URI Lib | |||
VERSION 1.0 | |||
QML_FILES LibSample.qml | |||
) | |||
target_compile_definitions(LibSample PRIVATE | |||
LIBSAMPLE_LIBRARY | |||
) | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
// LibSample_global.hファイル | // LibSample_global.hファイル | ||
77行目: | 113行目: | ||
#include <QQmlComponent> | #include <QQmlComponent> | ||
#include <QtQml/qqmlengine.h> | #include <QtQml/qqmlengine.h> | ||
#include " | #include "LibSample_global.h" | ||
class LIBSAMPLE_EXPORT LibSample : public QObject | class LIBSAMPLE_EXPORT LibSample : public QObject | ||
108行目: | 144行目: | ||
void LibSample::showQmlWindow() | void LibSample::showQmlWindow() | ||
{ | { | ||
QQmlComponent component(m_engine, "qrc:/ | QQmlComponent component(m_engine, "qrc:/qt/qml/LibSample.qml"); | ||
QObject *object = component.create(); | QObject *object = component.create(); | ||
120行目: | 156行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
<syntaxhighlight lang="qml"> | |||
// LibSample.qmlファイル | |||
import QtQuick | |||
import QtQuick.Window | |||
import QtQuick.Controls | |||
import QtQuick.Layouts | |||
Window { | |||
id: libWindow | |||
width: 300 | |||
height: 200 | |||
visible: true | |||
title: qsTr("LibSample QML Window") | |||
ColumnLayout { | |||
anchors.fill: parent | |||
anchors.margins: 10 | |||
Text { | |||
Layout.alignment: Qt.AlignHCenter | |||
text: "Hello from Hoge QML" | |||
font.pixelSize: 18 | |||
color: "blue" | |||
} | |||
Button { | |||
Layout.alignment: Qt.AlignHCenter | |||
text: "Click Me" | |||
onClicked: { | |||
messageText.visible = true | |||
libWindow.close() | |||
} | |||
} | |||
Text { | |||
id: messageText | |||
Layout.alignment: Qt.AlignHCenter | |||
text: "Button was clicked!" | |||
color: "green" | |||
font.pixelSize: 16 | |||
visible: false | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
動的ライブラリのプロジェクトをビルドして、デバッグディレクトリまたはリリースディレクトリに動的ライブラリ (.soファイル) が生成される。<br> | |||
<br> | <br> | ||
<u>※注意</u><br> | <u>※注意</u><br> | ||
<u>Windowsの場合、.dllファイルと.aファイルが生成されるため、.aファイルの<code>.a</code>拡張子を<code>.lib</code>拡張子に変更する必要がある。</u><br> | <u>Windowsの場合、.dllファイルと.aファイルが生成されるため、.aファイルの<code>.a</code>拡張子を<code>.lib</code>拡張子に変更する必要がある。</u><br> | ||
<br> | <br> | ||
==== 動的ライブラリのリンク ==== | ==== 動的ライブラリのリンク ==== | ||
動的ライブラリをQtプロジェクトにリンクするには、以下の手順を行う。<br> | 動的ライブラリをQtプロジェクトにリンクするには、以下の手順を行う。<br> |