Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Цветной квадрат по середине Qlabel


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

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

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

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

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

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

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

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

Спасибо.

Автор: loneybibi 8.11.2012, 15:57
Цитата(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);

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

Добавлено через 7 минут и 34 секунды
Просто конфетка получилась smile. Еще раз спасибо.

Автор: loneybibi 8.11.2012, 16:17
Цитата(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);


Автор: math64 9.11.2012, 08:01
А зачем вообще нужен 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)));
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)