Oct. 9, 2019, 3:39 a.m.

Как в QML в ComboBox сделать выпадающий список по ширине текста

ComboBox

Добрый день.
Как в QML в ComboBox сделать выпадающий список по ширине самого длинного текста?

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
6

Добрый день!

У ComboBox в Quick Controls 2 есть свойство delegate для выпадающенго меню. Нужно в нём настраивать ширину. Я думаю, что можно пройтись по всей модели, найти наиболее длинный текст, подсчитать необходимую ширину и задать эту ширину для делегата.

t

Как пройтись по модели? Я не нашёл как это сделать? Получается нужно скрипт писать? В Qt Widgets есть свойств несколько для выравнивания ширины по макс значению, здесь ничего такого нет? Тем более, что делегат кроме текста может быть чем угодно. Нужно его видимо ещё правильно написать, чтобы выпадающий список автоматом расширился?

Нашел такого делегата, но у него почему текст не виден, и не могу понять как задать цвет текста.
Помогите пожалуйста настроить этот делегат

            delegate: ItemDelegate {
             //width: comboBoxProfilOptions.width
             text: text
             //text: control.textRole ? (Array.isArray(comboBoxProfilOptions.model) ? modelData[comboBoxProfilOptions.textRole] : model[comboBoxProfilOptions.textRole]) : modelData
             font.weight: comboBoxProfilOptions.currentIndex === index ? Font.DemiBold : Font.Normal
             font.family: comboBoxProfilOptions.font.family
             font.pointSize: comboBoxProfilOptions.font.pointSize
             highlighted: comboBoxProfilOptions.highlightedIndex === index
             hoverEnabled: comboBoxProfilOptions.hoverEnabled
            }

Да. Делегат можно написать как угодно, там и изображения могут быть и чёрт знает что.

У ComboBox есть свойство model. Нужно обратиться к нему и через индекс пройтись по всем элементам, выбирая текст, или что-то там ещё у вас может быть, подсчитать предполагаемую максимальную длину, а потом задать ширину в делегате.
Это как я себе это представляю.

Прямо сейчас не могу это проверить или накидать пример, на данный момент на работе занят своими задачами.

Сделал так, но теперь не меняется CurrentIndex

            delegate: ItemDelegate {
                width: comboBoxProfilOptions.width
                height: 25
                highlighted: comboBoxProfilOptions.highlightedIndex === index
                hoverEnabled: comboBoxProfilOptions.hoverEnabled
                onClicked: {
                    comboBoxProfilOptions.currentIndex = index
                    comboBoxProfilOptions.t = text1
                    console.log("index:" + index)
                    console.log("text:" + text)
                }
                Rectangle{
                    anchors.fill: parent
                    border.width: 1
                    border.color: "black"
                    color: "#00000000"
                }

                Label{
                    x: 3
                    anchors.verticalCenter: parent.verticalCenter
                    width: parent.width
                    text: text1
                    font.pixelSize: comboBoxProfilOptions.font.pixelSize
                    //color: "red"
                }
            }

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Looking for a Job?
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

For registered users on the site there is a minimum amount of advertising

SV
Oct. 23, 2019, 1 a.m.
Semen Voloh

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:70points,
  • Rating points1
SS
Oct. 22, 2019, 2:31 p.m.
Samantha Smith

Qt - Test 001. Signals and slots

  • Result:52points,
  • Rating points-4
MB
Oct. 21, 2019, 1:25 a.m.
Mihail Bulatov

C++ - Test 002. Constants

  • Result:16points,
  • Rating points-10
Last comments
Oct. 17, 2019, 2:17 a.m.
Evgenij Legotskoj

Используем, там где требуется :)
MP
Oct. 17, 2019, 2:15 a.m.
Mikhail Petrov

Совет: подключайте ресурсы динамически. Используйте Resource Compiler: https://doc.qt.io/qt-5/rcc.html
Oct. 16, 2019, 6:45 a.m.
Evgenij Legotskoj

Если это не чистой воды спам, а по делу, то без проблем. Но в таком случае лучше создавайте отдельный вопрос на форуме . При создании вопроса есть поле, в котором можно указать статью…
KK
Oct. 16, 2019, 6:39 a.m.
Kirill Kirilych

А тут можно ссылки на сторонний ресурс показывать? Нашёл на habr похожую статью, только там чуток отличается код и про локальный сервер написано, нужно чтоб кто то понимающий посмотрел и своё …
Now discuss on the forum
Oct. 23, 2019, 4:06 a.m.
Evgenij Legotskoj

Ну если после обновления начало появляться, то тогда откатить драйвера. А вообще, если это жить не мешает и код работает как и раньше, то просто проигнорировать эти сообщения.
Oct. 22, 2019, 2:42 a.m.
Pavel K.

Всем привет , Пытаюсь реализовать класс для работы с блютуз (Bluetooth Handler) для мобилки , с использование QBluetoothDeviceInfo и QBluetoothDeviceDiscoveryAgent . Может у кого е…
Oct. 22, 2019, 2:16 a.m.
Pavel K.

попробуй сделать через свой собственный компонет , те возьми контрол Component, например , переорпедели как свой , в нем что нить типо проперти type : disk1, disk2 (сделай метод в структуре …
E
Oct. 22, 2019, 12:03 a.m.
Evgenij_Kanusovskij@1981

Этот алгоритм предназначен для того чтобы исключить из обработки строки содержащие буквенные символы. Если Вам не трудно опишите пожалуйста как бы Вы написали этот алгоритм, желательно в коде?
MP
Oct. 21, 2019, 7:03 a.m.
Mikhail Petrov

Зависит от вашей задачи. Можете обратить внимание на этот пример: https://doc.qt.io/qt-5/qtqml-referenceexamples-properties-example.html QQmlListProperty используется мною достаточно ч…
EVILEG
About
Services
© EVILEG 2015-2019
Recommend hosting TIMEWEB