Создаю класс, который
public наследует
QGraphicsRectItem.
Переопределяю метод
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)При этом полученный результат - отображение прямоугольника на виджете
QGraphicsView - оставляет желать лучшего.
Основная проблема заключается в том, что заливка сперва вообще не видна, а затем начинает мерцать по мере изменения геометрии основного окна.
Ниже приведен проблемный код, прошу помочь разобраться!
1. Заголовочный файл класса C++ (Qt)
class Foo : public QGraphicsRectItem
{
public:
Foo (QPointF O, double dis = 0);
~Foo ();
...
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
private:
QPointF dot_O_;
double height_;
const QPointF countRectCenter() const;
const QRectF countRectPos() const;
...
QRectF rect_;
};
2. Исходный код класса C++ (Qt)
Foo ::Foo (QPointF O, double dis)
: dot_O_ ( O ),
height_ ( dis ),
rect_ ( QRectF(dot_O_.x(), dot_O_.y(), 38, 50) )
{
}
Foo ::~Foo ()
{}
const QPointF Foo ::countRectCenter() const
{
return QPointF(dot_O_.x(), dot_O_.y() - height_);
}
const QRectF Foo ::countRectPos() const
{
return QRectF(QPointF(countRectCenter().x() - rect_.width()/2, countRectCenter().y() + rect_.height()/2),
QPointF(countRectCenter().x() + rect_.width()/2, countRectCenter().y() - rect_.height()/2));
}
...
void Foo ::paint(QPainter *painter,
const QStyleOptionGraphicsItem *option,
QWidget * /* widget */)
{
rect_ = QRectF(...);
painter->setPen(Qt::black);
painter->setBrush( Qt::SolidPattern );
painter->drawRect(rect_);
}
3. Пример рисования объекта C++ (Qt)
...
QMainWindow* mainwgt = new QMainWindow;
QGraphicsScene* scene = new QGraphicsScene(0, 0, 210, 220);
QGraphicsView* view = new QGraphicsView(scene);
view->setRenderHint(QPainter::Antialiasing, true);
mainwgt->setCentralWidget(view);
Foo* foobar = new Foo( QPointF(scene->width() / 2, scene->height()), 12.1 );
scene->addItem(foobar);
mainwgt->show();
...
Спасибо.