2016-07-22 5 views
1

Я добавляю всплывающее меню в свой графический интерфейс QtQuick (as in here I believe), и он не ведет себя так, как я ожидал.Всплывающее меню QtQuick не работает должным образом

Вот что я делаю:

import QtQuick 2.7 
import QtQuick.Layouts 1.3 
import QtQuick.Window 2.2 
import QtQuick.Controls 2.0 
import QtQuick.Controls.Styles 1.2 

ApplicationWindow 
{ 
    ... 

    // File menu button. 
    Rectangle 
    { 
     id: ribbonFileMenuButton 
     anchors.right: parent.right 
     anchors.verticalCenter: parent.verticalCenter 
     width: height 
     height: parent.height 
     scale: ribbonFileMenuButtonMA.pressed ? 1.3 : 1 
     color: "transparent" 

     // Icon. 
     RibbonFileButtonIcon 
     { 
      id: ribbonFileMenuButtonIcon 
      anchors.fill: parent 
     } 

     // Behavior. 
     MouseArea 
     { 
      id: ribbonFileMenuButtonMA 
      anchors.fill: parent 
      onClicked: menu.open() /*popup()*/ 
     } 
    } 
    ... 

    // File. 
    Menu 
    { 
     id: menu 
     y: 20 

     MenuItem 
     { 
      text: "New..." 
     } 
     MenuItem 
     { 
      text: "Open..." 
     } 
//  MenuSeparator { } 
     MenuItem 
     { 
      text: "Save" 
     } 
    } 

... 
} 

Во-первых, я должен назвать menu.open() и не menu.popup() (как описано в документ, указанный в выше, при условии ссылка): menu.popup() выходы ошибки:

TypeError: свойство 'всплывающее окно' объекта QQuickMenu (0x20f40f0) не является функцией

Тогда, если я раскомментировать MenuSeparator {}, я получаю следующее сообщение об ошибке:

MenuSeparator не тип

Опять же, согласно документу в предоставленной ссылке, он должен работать.

Я просмотрел в Интернете, но я немного потерял ...

Спасибо,

Antoine.

+2

Посмотрите, доступен ли MenuSeparator в разделе «import QtQuick.Controls 1.3»? – ManuelH

+0

Hum ... Эта регрессия отвечает на мои вопросы. Это странно ... Кажется, QtQuick.Controls 2.0 - это полная переписывание, которая не полностью закончена ... Правильно ли я? – arennuit

+1

Я не могу сказать с уверенностью, но это поможет, если вы укажете точную версию QT, которую используете. В настоящее время я использую 5.4, и в документации там четко указано, что для этой версии QT доступна версия «MenuSeparator», а версия QtQuick.Controls 1.3 я попросил вас попробовать. Если вы используете более новую версию QT, чем я, что, скорее всего, возможно, было очень возможно, что изменения были внесены в этот API между версиями QT. – ManuelH

ответ

2

Как @ManuelH сказал, MenuSeparator не доступен в Qt Quick Controls 2 ... yet. :)

Версия 2.0 действительно представляет собой полную переписку, которая приносит с собой новый API. Существует много одинаковых типов, но следует внимательно следить за документацией, чтобы не полагаться на API или поведение из Qt Quick Controls 1.x.

Разрешения на совместимость с источником разрешены (хотя и пытались свести к минимуму) в основных версиях (например, QtQuick 1.0 до QtQuick 2.0, Qt 4 - Qt 5 и т. Д.).

См. Страницу this для получения дополнительной информации о различиях между двумя API-интерфейсами и blog post, к которым он привязан.

+0

Awesome, thanks @Mitch! – arennuit