Qt Warring[QBrush: Incorrect use of TexturePattern]

0

Witam

Od paru dni tworzę prosty edytor kafelkowy i mam taki problem.

w klasie "Kafelka" dziedziczącej QGraphicsObject w metodzie paint ustawiam QBrush na Qt::TexturePattern i wczytuje QPixmap. Ale za każdym razem Qt Creator wywala "QBrush: Incorrect use of TexturePattern". Chociaż na pierwszy rzut oka wszystko działa dobrze.

void MyObject::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    QRectF rec = boundingRect();

    if (focus == true)
    {
        brush_color = QColor(Qt::blue);
        focus = false;
    }
    else
    {
        brush_color = Qt::black;
    }

    //QBrush brush(brush_color,Qt::SolidPattern);
    QBrush brush(brush_color);
    if (pixmap.isNull() == false)
    {
        brush.setStyle(Qt::TexturePattern);
        brush.setTexture(pixmap);
    }
    else
    {
        brush_color = Qt::black;
    }

    QPen   rect_pen(Qt::red);
    painter->setPen(rect_pen);
    painter->fillRect(rec,brush);
    painter->drawRect(rec);
}

W ogóle nie wiem czy dobrą metodę wybrałem, jakiej klasy powinienem użyć dla Kafelka ? Aby móc przechowywać w niej QPixmape i korzystać z sygnałów i slotów ?

Całość na razie wygląda tak :
user image

0

Google search pierwsza odpowiedź: http://stackoverflow.com/questions/5780251/how-to-draw-tiled-image-with-qt
Czyli zamiast używać QPixmap powinieneś użyć QImage.

Sprawdziłem kod QBrush. Wystarczy, że wywalisz linijkę brush.setStyle(Qt::TexturePattern); i będzie dobrze dobrze.
Cały problem wynika z API, które się nie podoba autorom i chcieli by z niego zrezygnować (chcą ukryć używanie typu Qt::BrushStyle, który w dobrym API jest jest zbędne). API nie znikało, by zachować comparability, ale zapomnieli zaktualizować dokumentację, w której informowaliby o tym, żeby nie używać danych funkcji.

0

Dzięki, działa bez ostrzeżeń.

A skoro ten sposób jest zły to np. użycie klasy dziedziczącej po np. QObject i QGraphicsPixmapItem było by lepszym rozwiązaniem ?

wtedy wystarczyło by dodać do klasy makro Q_OBJECT, Pixmapa była by już tam wbudowana, a reszta była by tak jak w QGraphicsObject/Item.

1 użytkowników online, w tym zalogowanych: 0, gości: 1