Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Цветной квадрат по середине Qlabel 
V
    Опции темы
becks
Дата 8.11.2012, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 6.7.2010

Репутация: нет
Всего: нет



Добрый день, коллеги! Есть большие по размеру Qlabel - ячейки QTableWidget, внутри их я отображаю некоторый цвет. Получается, что вся Qlabel раскрашена в этот цвет. Учитывая, что ячеек в QTableWidget получается очень пестрая таблица, посему было принято решение раскрашивать не всю ячейку (Qlabel), а только небольшой квадрат в центре нее, а остальной фон оставлять белым. 

Какое я вижу решение. Или использовать Qlabel с html-разметкой (если конечно получится), или использовать в качестве элемента ячейки QTableWidget еще один QTableWidget (размером 3 на 3) и раскрашивать только центральный квадрат.

Может есть, что-то проще?
PM MAIL   Вверх
loneybibi
Дата 8.11.2012, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

Репутация: 3
Всего: 3



Цитата(becks @ 8.11.2012,  09:50)
Добрый день, коллеги! Есть большие по размеру Qlabel - ячейки QTableWidget, внутри их я отображаю некоторый цвет. Получается, что вся Qlabel раскрашена в этот цвет. Учитывая, что ячеек в QTableWidget получается очень пестрая таблица, посему было принято решение раскрашивать не всю ячейку (Qlabel), а только небольшой квадрат в центре нее, а остальной фон оставлять белым. 

Какое я вижу решение. Или использовать Qlabel с html-разметкой (если конечно получится), или использовать в качестве элемента ячейки QTableWidget еще один QTableWidget (размером 3 на 3) и раскрашивать только центральный квадрат.

Может есть, что-то проще?

Намного легче на мой взгляд самому программно нарисовать квадратик к примеру 6х6 пикселей закрасить его нужным цветом и ничего не меняя отобразить уже в существуещем QLabel как картинку вместо закрашивания. smile


--------------------
Red Hat Fedora 17
Qt 4.8.1 (x64), GCC 4.4.3,
G++ 4.4.3, QtCreator 2.4.1
PM MAIL ICQ   Вверх
becks
Дата 8.11.2012, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 6.7.2010

Репутация: нет
Всего: нет



Если есть возможность покажите минимальный код, я не очень представляю как это сделать ( в смысле не очень понимаю, где\как рисовать этот самый квадратик). И как в таком случае определять цвет в QLabel?

Спасибо.

Это сообщение отредактировал(а) becks - 8.11.2012, 15:44
PM MAIL   Вверх
loneybibi
Дата 8.11.2012, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

Репутация: 3
Всего: 3



Цитата(becks @ 8.11.2012,  14:43)
Если есть возможность покажите минимальный код, я не очень представляю как это сделать ( в смысле не очень понимаю, где\как рисовать этот самый квадратик). И как в таком случае определять цвет в QLabel?

Спасибо.

Вот пример функции которая рисует красный квадратик 16х16:
Код

QPixmap MainWindow::myPaint()
{
    QPixmap pixmap(16,16);

    QPainter painter;

    painter.begin(&pixmap);

    painter.drawRect(0,0,16,16);
    painter.fillRect(0,0,16,16,QBrush(Qt::red));

    painter.end();

    return pixmap;
}

Вызываем ее к примеру на главной форме в QLabel:
Код

ui->label->setPixmap(myPaint());


Как я понял QLabel у вас делегат ячейки таблицы, соответственно вам его трогать вообще не надо, просто загружаете нарисованный квадрат из функции как рисунок и все!


А еще что бы квадратик отображался по центру вашего делегата QLabel надо сделать выравнивание у него:
Код

ui->label->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);


Это сообщение отредактировал(а) loneybibi - 8.11.2012, 16:04


--------------------
Red Hat Fedora 17
Qt 4.8.1 (x64), GCC 4.4.3,
G++ 4.4.3, QtCreator 2.4.1
PM MAIL ICQ   Вверх
becks
Дата 8.11.2012, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 6.7.2010

Репутация: нет
Всего: нет



Благодарствую, выручили. Сейчас попробую прикрутить.

Добавлено через 7 минут и 34 секунды
Просто конфетка получилась smile. Еще раз спасибо.
PM MAIL   Вверх
loneybibi
Дата 8.11.2012, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

Репутация: 3
Всего: 3



Цитата(becks @ 8.11.2012,  15:02)
Благодарствую, выручили. Сейчас попробую прикрутить.

Добавлено @ 16:09
Просто конфетка получилась smile. Еще раз спасибо.

Незачто! smile Можно еще переделать функцию например вот так:
Код

QPixmap MainWindow::myPaint(QRgb color)
{
    QPixmap pixmap(16,16);
    QPainter painter;
    painter.begin(&pixmap);
    painter.drawRect(0,0,16,16);
    painter.fillRect(0,0,16,16,QBrush(QColor(color)));
    painter.end();
    return pixmap;
}

Будете выбирать цвет квадратика до рисования по RGB палитре!
Код

label->setPixmap(myPaint(qRgb(111,222,333)));
label->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);




--------------------
Red Hat Fedora 17
Qt 4.8.1 (x64), GCC 4.4.3,
G++ 4.4.3, QtCreator 2.4.1
PM MAIL ICQ   Вверх
math64
Дата 9.11.2012, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



А зачем вообще нужен QLabel? Рисуйте прямо в делегате:
Код

void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    painter.drawRect(0,0,16,16);
    painter.fillRect(0,0,16,16,QBrush(QColor(color)));
}

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1145 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.