Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Alexander_57 от Сентябрь 03, 2011, 18:17



Название: Статичный текст заголовка (поле со стрелкой) QComboBox
Отправлено: Alexander_57 от Сентябрь 03, 2011, 18:17
Добрый вечер!
Скажите пожалуйста можно ли сделать текст в заголовке (поле со стрелкой) у QComboBox-a статичным и неизменным при выборе элемента из списка?

Я создал QComboBox в который в качестве модели установил QStandardItemModel, а в качестве представления - QTreeView. Элементы в структуре имеют переключатели (Checkable). Так вот созданные мною виджет представляет собой выпадающее окно, в котором выбираются регионы проживания. Поэтому в заголовке кнопки ничего не должно показываться, кроме статического текста "Выбор региона".


Название: Re: Статичный текст заголовка (поле со стрелкой) QComboBox
Отправлено: NicK от Сентябрь 05, 2011, 10:30
почему бы просто не поместить combobox на frame с нужным заголовком?  :)


Название: Re: Статичный текст заголовка (поле со стрелкой) QComboBox
Отправлено: Alexander_57 от Сентябрь 05, 2011, 14:10
Как это?
Суть создаваемого виджета: нажимаем на кнопку QComboBox, выбираем необходимые регионы.
Вариант использования:
1. Разворачиваем QComboBox.
2. Выбираем (устанавливаем галочки) города Москва, Санкт-Петербург, Новосибирск.
3. Закрываем QComboBox. В заголовке стоит Новосибирск (так как он выбирался последним). ТАК БЫТЬ НЕ ДОЛЖНО  :-[


Название: Re: Статичный текст заголовка (поле со стрелкой) QComboBox
Отправлено: LisandreL от Сентябрь 05, 2011, 14:23
ТАК БЫТЬ НЕ ДОЛЖНО  :-[
Так как вы описали тоже быть не должно.
Если я пользуюсь программой выбираю пункты, а в итоге так и останется "Выбор региона", я решу, что ничего не выбралось. В идеале (на мой взгляд) отображаемое значение QComboBox-a должно стать «Москва, Санкт-Петербург, Новосибирск».
Реализацию не подскажу, извините.


Название: Re: Статичный текст заголовка (поле со стрелкой) QComboBox
Отправлено: Alexander_57 от Сентябрь 05, 2011, 15:09
После выбора регионов их список появляется под QComboBox-м. В заголовке их перечислять нельзя (если пользователь выберет большое количество регионов, то их надписи не поместятся в заголовке).
Во вложениях скриншоты того, что я бы хотел создать.


Название: Re: Статичный текст заголовка (поле со стрелкой) QComboBox
Отправлено: _OLEGator_ от Сентябрь 06, 2011, 11:07
Делайте обычной кнопкой, по нажатии на которую показывайте вьюху дерева popup-окном.


Название: Re: Статичный текст заголовка (поле со стрелкой) QComboBox
Отправлено: Kolobok от Сентябрь 06, 2011, 12:32
Наследуйся от QComboBox и переопредели initStyleOption(...).


Название: Re: Статичный текст заголовка (поле со стрелкой) QComboBox
Отправлено: Alexander_57 от Сентябрь 06, 2011, 15:56
_OLEGator_ и Kolobok большущее спасибо. Оба варианта верные.
Вот как я сделал. Переопределил paintEvent в QComboBox-е.

// Переопределение стандартного метода (перерисовка элемента)
void paintEvent(QPaintEvent *a_pPaintEvent)
{
   QStylePainter StylePainter(this);
   QStyleOptionComboBox StyleOptionComboBox;
   initStyleOption(&StyleOptionComboBox);
   StylePainter.drawComplexControl(QStyle::CC_ComboBox, StyleOptionComboBox);
   StyleOptionComboBox.currentText = "Выбор регионов";
   StylePainter.drawControl(QStyle::CE_ComboBoxLabel, StyleOptionComboBox);
}


Название: Re: Статичный текст заголовка (поле со стрелкой) QComboBox
Отправлено: Kolobok от Сентябрь 07, 2011, 12:04
Правильнее переопределить initStyleOption. А так sizeHint может неправильно работать.