2015-11-19 5 views
-1

Я бы создал отдельный файл, содержащий компонент для MenuBar в ApplicationWindow. У меня есть исходный файл, как это:Создайте отдельный файл QML для MenuBar в ApplicationWindow

ApplicationWindow { 
    visible: true 
    width: 640 
    height: 480 
    title: qsTr("Hello World") 

    menuBar: MenuBar { 
     Menu { 
      title: qsTr("File") 
      MenuItem { 
       text: qsTr("&Open") 
       onTriggered: console.log("Open action triggered"); 
      } 
      MenuItem { 
       text: qsTr("Exit") 
       onTriggered: Qt.quit(); 
      } 
     } 
    } 

    Label { 
     text: qsTr("Hello World") 
     anchors.centerIn: parent 
    } 
} 

Но я бы отделить и сделать более сложное меню в отдельном файле, как это:

Первый Файл:

ApplicationWindow { 
    visible: true 
    width: 640 
    height: 480 
    title: qsTr("Hello World") 

    menuBar: MyMenuBar{ 
    } 

    Label { 
     text: qsTr("Hello World") 
     anchors.centerIn: parent 
    } 
} 

Второй файл: (MyMenuBar.qml)

MenuBar { 
    Menu { 
     title: qsTr("File") 
     MenuItem { 
      text: qsTr("&Open") 
      onTriggered: console.log("Open action triggered"); 
     } 
     MenuItem { 
      text: qsTr("Exit") 
      onTriggered: Qt.quit(); 
     } 
    } 
} 

Я пробовал с этим решением, но когда я пытаюсь запустить программу, это говорит MyMenuBar is not a type.

Что случилось?

+1

Ваш проект использует файл '.qrc'? Если это так, попробуйте снова запустить qmake, щелкнув правой кнопкой мыши по проекту в Creator и нажав 'Run qmake', а затем снова создайте свой проект. – Mitch

+0

@ Митч прав. Ваш файл ресурсов '.qrc' должен выглядеть как [this] (https://gist.github.com/ftena/ef94e24d2e0727a26917). – Tarod

ответ

0

В файле qml ничего не найдено. Если вы поместите оба файла в один каталог и запустите qmlscene main.qml (учитывая, что main.qml - ваш первый файл), вы получите желаемый результат. Если вы используете код C++ в своем проекте, вы можете добавить все файлы qml в файл qrc, как это предлагается в комментариях. Если у вас нет таких желаний, я думаю, что что-то не так с вашим файлом проекта. Я бы предложил вам создать новый проект Qt Quick UI и поместить первый файл в созданный файл, а затем щелкнуть правой кнопкой мыши по проекту и нажать add new и выбрать Qt > QML file и назовите его MyMenuBar.qml и введите свой код в него. Я думаю, что это должно решить вашу проблему.