QML Изменение стиля меню TextField

Я хотел бы настроить стиль своего приложения, и я застрял на стиле всплывающего меню TextField.

TextField.style позволяет настраивать внешний вид TextField, но не содержит стиля меню. Согласно документации существует свойство menu, содержащий Menu, поэтому я попробовал что-то вроде этого:

TextField {
   menu.style: MenuStyle {
       //...
   }
}

Код выше жалуется, что свойство style не существует, поэтому это не совсем Menu, это Component используется для создания меню, и я не знаю, есть ли способ пройти через него к фактическому Menu. В документации только упоминается, что TextField.menu можно установить на null, чтобы полностью отключить его, и не указаны другие варианты использования.

Так есть ли способ попасть в меню TextField и изменить его стиль?


person Krzysztof Piekutowski    schedule 20.07.2015    source источник


Ответы (1)


Ну, вы должны опубликовать весь соответствующий код здесь. В любом случае, вы не можете определить меню TextField и его стиль отдельно. См. пример ниже, чтобы настроить стиль Menu и добавить его во встроенный TextField:

TextField {
    text: "text here"
    anchors.centerIn: parent
    menu: Menu {
        style: MenuStyle {
            frame: Rectangle {
                color: "green"
                border.color: "purple"
            }
            itemDelegate {
                background: Rectangle {
                    color: "yellow"
                }
                label: Text {
                    color: styleData.selected ? "red" : "blue"
                    text: styleData.text
                }
            }
        }
        MenuItem { text: "Cut" }
        MenuItem { text: "Copy" }
    }
}

Полный список MenuStyle свойств см. на этой странице. .

person folibis    schedule 21.07.2015
comment
Есть ли способ изменить стиль меню без повторной реализации меню? Насколько я понимаю, в этом решении мне нужно будет указать свои собственные действия для вырезания, копирования и т. д. - person Krzysztof Piekutowski; 21.07.2015
comment
Я не думаю, что это возможно. TextField.menu это Component и у него просто нет свойства style. - person folibis; 22.07.2015
comment
Спасибо @folibis, а какие у него свойства? TextField.menu.url указал мне на файл Qt5.5.0/5.5/gcc_64/qml/QtQuick/Controls/Private/EditMenu_base.qml, в котором реализовано меню по умолчанию. Я скопировал его в свой проект и немного изменил, чтобы принять пользовательский стиль меню, и привязал его к моему TextField. Это грязно, но это работает. - person Krzysztof Piekutowski; 22.07.2015
comment
Да, похоже, это единственный способ сделать это. - person folibis; 23.07.2015
comment
@krzysiek: вы пытаетесь использовать это меню на iOS или Android? Потому что я не успешен. - person Libor B.; 17.02.2016
comment
@ЛиборБ. Нет, я только пытался использовать его в настольном приложении. - person Krzysztof Piekutowski; 17.02.2016