Название: Color ComboBox Отправлено: aliks-os от Май 20, 2011, 11:53 Приветствую всех.
Как то понадобился мне выбор цвета из ComboBox. Готового решения не нашел, пришлось писать самому, все довольно таки просто. Может кому то понадобиться. Код: QComboBox *comboBox = new QComboBox(this); Название: Re: Color ComboBox Отправлено: Пантер от Май 20, 2011, 12:01 QStringList QColor::colorNames () [static]
Название: Re: Color ComboBox Отправлено: GreatSnake от Май 20, 2011, 12:08 Цитировать Готового решения не нашел, пришлось писать самому, все довольно таки просто. И зря - всё уже написано. См. Color Editor Factory Example в ассистенте.И увидишь, что если для Qt::DecorationRole передавать QColor, то Qt всё сама сделает) Название: Re: Color ComboBox Отправлено: aliks-os от Май 20, 2011, 12:28 Цитировать Готового решения не нашел, пришлось писать самому, все довольно таки просто. И зря - всё уже написано. См. Color Editor Factory Example в ассистенте.И увидишь, что если для Qt::DecorationRole передавать QColor, то Qt всё сама сделает) Воспроизводил уже это...в нем когда ComboBox закрыт, цвет не отображается Название: Re: Color ComboBox Отправлено: aliks-os от Май 20, 2011, 12:29 Название: Re: Color ComboBox Отправлено: asg128 от Сентябрь 23, 2011, 08:23 Спасибо за код!
После оформления его в виде класса-наследника QComboBox с добавлением свойства color, получился удобный виджет. Название: Re: Color ComboBox Отправлено: AlexMad от Январь 16, 2012, 00:33 А вот у меня немного странный вопрос (Может, я не дочитал документацию). Как мне получить цвет при выборе, при условии, что текстовое поле я не заполняю.
Т.е. вместо Код: ui.comboBox_Col_1Y->addItem(colorName, color); Код: ui.comboBox_Col_1Y->addItem("", color); Повторюсь - может, я не дочитал доку, но пока у меня в голове крутятся два не очень красивых варианта: 1. Дешево и сердито. Смотреть цвет пикселя иконки. Не уверен, что это легко, тем более не уверен, что это красиво. 2. Создать дополнительное свойство для Item в ComboBox, несущее информацию о цвете. Может и красиво, но, думаю, уже давно реализовано проще и лучше. Задача достаточно проста - нужно выбрать цвета для 30 и более графиков. На форме просто не влезет столько ComboBoxов, если им дать место для вывода названия цвета, а при малом их размере видны только первые полторы буквы, что не очень красиво. Думал, что addItem("", color) добавляет не только текст, но и некое доп. свойство (color). Но при попытке его получить Код: QColor curColor = qVariantValue<QColor>(ui.comboBox->itemData(ui.comboBox->currentIndex(), Qt::DecorationRole)); Название: Re: Color ComboBox Отправлено: kambala от Январь 16, 2012, 00:43 да, второй вариант уже придуман разработчиками библиотеки: QComboBox::setItemData ( int index, const QVariant & value, int role = Qt::UserRole )
Название: Re: Color ComboBox Отправлено: AlexMad от Январь 16, 2012, 01:04 да, второй вариант уже придуман разработчиками библиотеки: QComboBox::setItemData ( int index, const QVariant & value, int role = Qt::UserRole ) В эту сторону копал, но сбился на предложенном выше Код: comboBox->setItemData(con, pixmap, Qt::DecorationRole);//Добавляем изображение цвета в комбо Название: Re: Color ComboBox Отправлено: kambala от Январь 16, 2012, 01:40 а, так тебе надо было просто использовать UserRole вместо DecorationRole для получения цвета.
ещё есть метод добавления иконки и своих данных одновременно, вместо setItemData: QComboBox::addItem ( const QIcon & icon, const QString & text, const QVariant & userData = QVariant() ). а пустой текст лучше задавай через QString(), а не "". Название: Re: Color ComboBox Отправлено: GreatSnake от Январь 16, 2012, 10:33 А вот у меня немного странный вопрос (Может, я не дочитал документацию). Как мне получить цвет при выборе, при условии, что текстовое поле я не заполняю. См. готовый вариант [http://www.prog.org.ru/index.php?topic=19455.msg131386#msg131386]здесь[/url]. Для установки/получения цвета используй только Qt::BackgroundRole.Код: QColor curColor = qVariantValue<QColor>(ui.comboBox->itemData(ui.comboBox->currentIndex(), Qt::DecorationRole)); Название: Re: Color ComboBox Отправлено: AlexMad от Январь 16, 2012, 11:45 а, так тебе надо было просто использовать UserRole вместо DecorationRole для получения цвета. Вот!!! Именно то, что искал. Спасибо!!! Название: Re: Color ComboBox Отправлено: popper от Январь 16, 2012, 14:24 AlexMad, в библиотеке QSint есть еще интересные виджеты для выбора цвета.
|