Михаил Сермяжко
Михаил Сермяжко9 октября 2019 г. 4:39

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

ComboBox

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

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

6
Evgenii Legotckoi
  • 9 октября 2019 г. 5:13

Добрый день!

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

    t
    • 9 октября 2019 г. 5:22

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

      Михаил Сермяжко
      • 9 октября 2019 г. 5:27

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

                  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
                  }
      
        Evgenii Legotckoi
        • 9 октября 2019 г. 5:28

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

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

          Evgenii Legotckoi
          • 9 октября 2019 г. 5:29
          • (ред.)

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

            Михаил Сермяжко
            • 9 октября 2019 г. 6:04
            • (ред.)

            Сделал так, но теперь не меняется 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"
                            }
                        }
            

              Комментарии

              Только авторизованные пользователи могут публиковать комментарии.
              Пожалуйста, авторизуйтесь или зарегистрируйтесь
              Г

              C++ - Тест 001. Первая программа и типы данных

              • Результат:66баллов,
              • Очки рейтинга-1
              t

              C++ - Тест 001. Первая программа и типы данных

              • Результат:33баллов,
              • Очки рейтинга-10
              t

              Qt - Тест 001. Сигналы и слоты

              • Результат:52баллов,
              • Очки рейтинга-4
              Последние комментарии
              G
              GoattRock3 сентября 2024 г. 20:50
              Как Копировать Файлы в Linux Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
              ВР
              Влад Русоков2 августа 2024 г. 8:47
              Как Копировать Файлы в Linux Screenshot_20240802-065123.png
              d
              dblas55 июля 2024 г. 18:02
              QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
              k
              kmssr9 февраля 2024 г. 2:43
              Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
              АК
              Анатолий Кононенко5 февраля 2024 г. 9:50
              Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
              Сейчас обсуждают на форуме
              Evgenii Legotckoi
              Evgenii Legotckoi24 июня 2024 г. 22:11
              добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
              F
              Fynjy22 июля 2024 г. 11:15
              при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
              BlinCT
              BlinCT25 июня 2024 г. 8:00
              Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
              BlinCT
              BlinCT5 мая 2024 г. 12:46
              Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
              Evgenii Legotckoi
              Evgenii Legotckoi2 мая 2024 г. 21:07
              Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

              Следите за нами в социальных сетях