Как изменить текущий элемент QCombobox с помощью PaintEvent() в Qt

У меня есть поле со списком, в котором есть 3 элемента, т.е. элемент 1, элемент 2 и элемент 3. Я добавил эти 3 элемента в файл .ui, а также добавил изображение для всех, используя файл ресурсов. Теперь, когда я запускаю приложение, оно показывает первый элемент в поле со списком вместе с изображением слева. Когда я нажимаю на раскрывающийся список, я вижу все элементы вместе с изображениями.

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

Сценарий. Элементы и изображения в поле со списком добавляются следующим образом:

Image 1 Item 1
Image 2 Item 2
Image 3 Item 3

Когда я запускаю приложение, оно должно отображаться в поле со списком как

Image1

так как первый элемент отображается по умолчанию. Я думаю, что это можно сделать при рисовании текущего выделения, QCombobox использует повторную имплантацию: void MyCombo::paintEvent(QPaintEvent *e), о чем я не знаю.

Может ли кто-нибудь помочь мне в этом?? :)

Как я могу этого добиться???


person Gojira    schedule 18.12.2012    source источник


Ответы (1)


Вы должны наследовать QComboBox и переопределить void QComboBox::showPopup () [virtual]
P.S. Если вы переопределяете эту функцию для отображения пользовательского всплывающего окна, убедитесь, что вы вызываете hidePopup() для сброса внутреннего состояния.
Вторая идея, которую я имею, заключается в том, чтобы реализовать модель для поля со списком, но я сейчас точно не знаю, есть ли какой-либо правило для всплывающих элементов.

person Ruslan F.    schedule 18.12.2012
comment
Спасибо за ответ. Если я повторно реализую эту функцию, она покажет пользовательское всплывающее окно. Но я хочу отображать только изображение по умолчанию при запуске приложения. Когда я нажимаю «Всплывающее окно», оно должно показывать все, что происходит. - person Gojira; 18.12.2012
comment
Также существует void QComboBox::setView ( QAbstractItemView * itemView ), который устанавливает представление, которое будет использоваться во всплывающем окне со списком, для данного itemView. Поле со списком становится владельцем представления. - person Ruslan F.; 18.12.2012
comment
Я думаю, что ShowPopup() не является правильным способом достижения этого. paintevent — это то, что используется, когда приложение рисует текущий выбор - person Gojira; 18.12.2012
comment
Я думаю, вы должны добавить контейнер списка для хранения строк элементов и при отображении всплывающего окна setItemText (i,...) для каждого элемента при скрытии setItemText (i,); - person Ruslan F.; 18.12.2012