Рамка вокруг изображения в QLabel

424
20 декабря 2016, 22:27

Есть QLabel, в который нужно запихнуть изображение. Нужно сделать так, чтобы это изображение отображалось с рамкой различной толщины. Как это можно сделать?
P.S. QtStyleSheets не подходит

Или, если есть лучший способ работы с изображениями в Qt, подскажите пожалуйста. Чтобы задача была понятнее, нужно отрисовать HTML тег img с его атрибутами средствами Qt Widgets. Очень слабо знаю Qt, а время поджимает.

Answer 1

Класс QLabel наследуется от QFrame, а у последнего имеются методы установки рамки, стиля тени, а также толщины линий (тут и тут).

Но можно и вручную на виджете, переопределив соответствующий метод:

void MyWidget::paintEvent(QPaintEvent *event) {
    QPixmap pix("image.png");
    if(pix.isNull() == false) {
        QRect dst_rc = rect();
        if(dst_rc.width() > dst_rc.height())
            pix = pix.scaledToHeight(dst_rc.height());
        else if(dst_rc.height() > dst_rc.width())
            pix = pix.scaledToWidth(dst_rc.width());
        dst_rc = pix.rect();
        dst_rc.moveCenter(rect().center());
        const QBrush brush(Qt::black);
        const QPen pen(brush, 2); // Второй аргумент - толщина линии.
        QPainter painter(this);
        painter.setPen(pen);
        painter.setBrush(brush);
        painter.drawPixmap(dst_rc, pix);
        painter.drawRect(dst_rc);
    }
    event->accept();
}

... где MyWidget - наследник QWidget.

READ ALSO
Перевод с C++ на русский или C#

Перевод с C++ на русский или C#

ДВС! Помогите расшифровать фрагмент кода:

530
Умный указатель и массив

Умный указатель и массив

Задача поставлена следующим образом: создать класс умный указатель, с которым можно будет реализовать следующее:

308
Пункты меню “Окно” MDI-приложения

Пункты меню “Окно” MDI-приложения

Как в Qt можно реализовать меню "Окно" MDI-приложения, отражающее открытые внутренние окна и позволяющее переключаться между ними? Пока приходит...

431
Как добавить путь в REST API на QTcpSocket

Как добавить путь в REST API на QTcpSocket

написал простенький класс который работает как однопоточный http сервер, выдающий текущее время и дату, если обратиться по 1270

320