Регулировка толщины QPen при масштабировании QGraphicsView?

Одна удивительная особенность QGraphicsView это его способность масштабировать себя с содержимым сцены (фактически, каждый QGraphicsItem вставлен в сцену). QPixmap что я правильно вставил шкалы, что означает, что если я предоставлю коэффициент масштабирования 4x4 с этим:

view->scale(4,4);

Pixmap увеличен, как я хочу сделать.

Но это не тот случай, когда я привык рисовать; они нацелены на окружение растровых изображений, которые я рисую на сцене, и независимо от масштабного коэффициента, они сохраняют толщину 1 вместо - я думаю - 4.

Я искал документацию обо всех этих вещах, пытаясь выяснить точное назначение "косметической ручки", но мне все еще не удается сделать мой прямоугольник более толстым.

Последнее уведомление: у меня есть обычай QGraphicsItem и QPen, который используется для рисования прямоугольника, создается на лету в

virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);

метод.

Это имеет значение?

Заранее благодарю и извиняюсь за недостаток опыта / знаний в области Qt и в алгоритмах рисования...

1 ответ

Решение

Неважно, где вы создаете экземпляр QPen.

Ширина QPen по умолчанию равна 0. Это специальное значение, которое означает, что косметика имеет значение true, а ширина фактически равна 1. Поэтому, если вы не хотите, чтобы перо было косметическим, вы должны установить желаемую ширину. Вам также может понадобиться установить косметическое значение в false.

Вот простой пример:

#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QGraphicsView view;
    QGraphicsScene scene;

    QGraphicsRectItem *item1 = scene.addRect(20, 20, 20, 20);
    QGraphicsRectItem *item2 = scene.addRect(50, 20, 20, 20);

    QPen pen1, pen2;
    pen1.setWidth(5);
    pen2.setWidth(5);
    pen1.setCosmetic(true);
    pen2.setCosmetic(false);

    item1->setPen(pen1);
    item2->setPen(pen2);

    view.setScene(&scene);
    view.scale(4, 4); // both rects are the same size, but one a has wider pen
    view.show();

    return a.exec();
}
Другие вопросы по тегам