3

Windows と Mac OS X で動作するアプリケーションを構築してQMLいます。QML でメニューを管理したいので、アプリケーションでMenuBarコンポーネントの使用を開始しました。QQuickViewQML 要素を表示するために C++ でa を使用しています。メニューは Mac OS X で正しく表示されますが、何も表示されWindowsず、ログにもエラーが記録されません。

ドキュメントには、このコンポーネントがリンクされていることApplicationWindowが記載されていますが、Mac OS で正常に動作していたので、どこでも同じように動作することを望んでいました。

Windows でこれを修正する方法はありますか?

4

2 に答える 2

2

これが QMLApplicationWindowコンポーネントで行われる方法を見て、Windows でメニューを表示する方法を見つけました。__contentItemアイデア/ハックは、コンポーネントのプロパティを使用MenuBarしてルート要素にアタッチすることです。また、メニューがネイティブでない場合にのみこれを行い、Mac OS X で以前と同じように機能するようにします。

TopMenu.qml

import QtQuick 2.1
import QtQuick.Controls 1.0

MenuBar {
  Menu {
    title: "Window"
    MenuItem {
      text: "SubMenu3"
      shortcut: "Ctrl+s"
    }
    MenuItem {
      text: "SubMenu2"
      shortcut: "Ctrl+p"
    }
    MenuItem {
      text: "Preferences"
      shortcut: "Ctrl+,"
    }
  }
}

RootElement.qml

import QtQuick 2.1

Rectangle {
    id: rootWindow
    width: 400
    height: 400


    Item {
        id: menuWrapper
        anchors.fill: parent

        TopMenu {
          id: myTopMenu
        }

        states: State {
          name: "hasMenuBar"
          when: myTopMenu && !myTopMenu.__isNative

          ParentChange {
              target: myTopMenu.__contentItem
              parent: rootWindow
          }

          PropertyChanges {
              target: myTopMenu.__contentItem
              x: 0
              y: 0
              width: menuWrapper.width
          }
        }
    }
}
于 2013-11-13T14:08:02.210 に答える