「QMLの基礎 - ライブラリ」の版間の差分

ナビゲーションに移動 検索に移動
 
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 "hoge_global.h"
  #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:/Hoge/Hoge.qml");
     QQmlComponent component(m_engine, "qrc:/qt/qml/LibSample.qml");
   
   
     QObject *object = component.create();
     QObject *object = component.create();
120行目: 156行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
動的ライブラリのプロジェクトをビルドして、debugディレクトリまたはreleaseディレクトリにライブラリが生成される。<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>

案内メニュー