Russian Qt Forum
Ноябрь 25, 2024, 02:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как создать свой собственный combobox ?  (Прочитано 6881 раз)
virtual_root
Гость
« : Август 13, 2012, 21:04 »

Добрый вечер снова! Ребята, подскажите как реализовать мою идею)
Мне нужно создать свой компонент выпадающего списка. Только это должен быть список маркеров для текстового редактора. Как в word есть нумерованный список, а есть маркированный, мы нажимаем на маленький треугольник справа и выпадает список вариантов маркеров для списка. Я пыталась наследоваться от компонента QCombobox. Ну не могу ничего изменить в наследнике всё время выпадает ошибка:
Код:
undefined reference to 'vable for PictureCmboBox'
Я понимаю, что он ругается на таблицу виртуальных функций, но почему не могу понять...
Вот мой код, и он не компилируется... не понятно почему...
Код
C++ (Qt)
class PictComboBox : public QComboBox
{
public :
    PictComboBox(QWidget* parent) : QComboBox(parent)
    {
    }
}
 
Смотрела в сторону реализации с помощью делегата, ну что-то не пойму как с помощью него такое сделать... Подскажите, может кому уже приходилось такое реализовывать?
« Последнее редактирование: Август 13, 2012, 21:16 от tiny developer » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Август 13, 2012, 21:17 »

может из-за неправильной сигнатуры конструктора? попробуй PictComboBox(QWidget* parent = 0).

да, а #include <QComboBox> написано? Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
virtual_root
Гость
« Ответ #2 : Август 13, 2012, 21:34 »

это наверное был баг Qt... я ещё раз пересоздала класс и всё собралось. Спасибо большое. А дальше как мне список такой воплотить в реальность не подскажите?
Записан
Bepec
Гость
« Ответ #3 : Август 14, 2012, 06:56 »

Я тебе советую сделать простой виджет - layout с масенькими кнопачками внутри. Выйдет быстрее и проще % на 80.

Ну или сделать свой собственный model-view, с блекджеком и ш... и бабками Веселый
Записан
virtual_root
Гость
« Ответ #4 : Август 14, 2012, 09:52 »

Я так и решила Верес, просто сделать кнопочками. Вот как я придумала:
возьму 2 кнопки QPushButton, одну из них сделаю квадратной формы и наложу на неё картинку списка, вторую прилеплю рядом и наложу на неё картинку маленького треугольника раскрывающего списка. Чтобы получилось как на прикрепленной картинке. По щелчке по квадратной кнопке будут раскрывать виджет который расположу под ними и который напихаю картинки маркеров)) вот так придумала)
Записан
Bepec
Гость
« Ответ #5 : Август 14, 2012, 10:20 »

В принципе в моём стиле сделано - максимально просто. А можно было бы посложнее - сделать свою кнопочку с отрисовочкой и реакцией на нажатие Улыбающийся

PS минимум затрат - максимум результата. Угумс.
Записан
Странник
Гость
« Ответ #6 : Август 14, 2012, 11:39 »

я сейчас страшную вещь спрошу. обычный QComboBox чем не устроил? вам же по сути нужен QComboBox, содержащий картинки, или я чего-то в этой жизни не понял?
Код:
comboBox->addItem(QIcon(":/icons/mark1.png"), QString());
comboBox->addItem(QIcon(":/icons/mark2.png"), QString());
comboBox->addItem(QIcon(":/icons/mark3.png"), QString());
« Последнее редактирование: Август 14, 2012, 11:42 от Странник » Записан
Bepec
Гость
« Ответ #7 : Август 14, 2012, 11:57 »

Странник, а разве combobox поддерживает расположение итемов в сетке ?

Аля gridView?
Записан
virtual_root
Гость
« Ответ #8 : Август 14, 2012, 12:04 »

Картинки запихивать то можно в QCombobox, но мне же нужен внешний вид компонента как на картинке, что я выше привела.
Записан
Странник
Гость
« Ответ #9 : Август 14, 2012, 12:22 »

Странник, а разве combobox поддерживает расположение итемов в сетке ?

Аля gridView?
QListView поддерживает. и стоит в качестве view по умлочанию.
Код:
QListView *view = qobject_cast<QListView *>(comboBox->view());
if (view)
{
    view->setFlow(QListView::LeftToRight);
    view->setWrapping(true);
    view->setResizeMode(QListView::Adjust);
}
как-то так, мог что-то забыть. но мне лично больше нравится в столбец.

Картинки запихивать то можно в QCombobox, но мне же нужен внешний вид компонента как на картинке, что я выше привела.
стили?
Записан
Bepec
Гость
« Ответ #10 : Август 14, 2012, 12:41 »

Об вот этом я и незнал. Что в comboBox listView. Тогда да - просто использовать приведённый код и вуаля.
Записан
andrew.k
Гость
« Ответ #11 : Август 14, 2012, 14:30 »

Пока читал тред пару раз в обморок грохнулся)

Об вот этом я и незнал. Что в comboBox listView. Тогда да - просто использовать приведённый код и вуаля.
стыдно, батенька!
Записан
Bepec
Гость
« Ответ #12 : Август 14, 2012, 14:53 »

Стыдно ногой пнуть беспомощного и беззащитного.

Мне не стыдно чего-то незнать Улыбающийся Мне стыдно чему то не научиться Веселый

PS атятя Веселый
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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