Russian Qt Forum
Августа 26, 2025, 17:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QComboBox: ширина выпадающего списка по содержимому...  (Прочитано 5917 раз)
Cyrax
Гость
« : Января 10, 2008, 10:51 »

Как в QComboBox установить щирину выпадающего списка по содержимому этого списка, чтобы в списке не было многоточий. Т.е., при необходимости, ширина выпадающего списка может быть шире самого combobox'а в зависимости от содержимого списка.

setInsertPolicy() - не то
setSizeAdjustPolicy() - похоже, но нужно применительно к выпадающему списку...
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Января 11, 2008, 01:55 »

можно переопределить showPopup(), пройтись по списку, найти максимальную ширину текста и поменять размер, примерно так:

void MYComboBox::showPopup()
{
    QComboBox::showPopup();

    int w = 0, w1;
    QFontMetrics fm;
    for (int i = 0; i < count(); i++) {
       w1 = fm.width (itemText(i));
       if (w1 > w) w = w1;
   }

    // let's find container among the children
    const QObjectList &kids = children();
    for (int i = 0; i < kids.count(); i++) {
        QFrame *fr = dynamic_cast<QFrame*>(kids.at(i));
        if (fr) {
            fr->setWidth(w + 10);  // add 10 extra pixels ...
            break;
        }
    }
}
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Alex03
Гость
« Ответ #2 : Января 11, 2008, 07:43 »

можно переопределить showPopup(), пройтись по списку, найти максимальную ширину текста и поменять размер, примерно так:

void MYComboBox::showPopup()
{
    QComboBox::showPopup();

    int w = 0, w1;
    QFontMetrics fm;
    for (int i = 0; i < count(); i++) {
       w1 = fm.width (itemText(i));
       if (w1 > w) w = w1;
   }

    // let's find container among the children
    const QObjectList &kids = children();
    for (int i = 0; i < kids.count(); i++) {
        QFrame *fr = dynamic_cast<QFrame*>(kids.at(i));
        if (fr) {
            fr->setWidth(w + 10);  // add 10 extra pixels ...
            break;
        }
    }
}
так костылис.... Хочется свойсва в "Базовой комплектации" Улыбающийся Улыбающийся
Второй цикл можно упразднить используя
Код:
QAbstractItemView * QComboBox::view () const
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.019 секунд. Запросов: 19.