Russian Qt Forum
Ноябрь 25, 2024, 02:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsLayoutItem для размещения любого QGraphicsItem в QGraphicsLayout  (Прочитано 3316 раз)
notnext
Гость
« : Май 07, 2009, 10:20 »

Возникла потребность разместить в QGraphicsGridLayout набор произвольных QGraphicsItem
В QGraphicsLayout можно разместить только QGraphicsLayoutItem.

Вот класс MyGraphicsLayoutItem для размещения любого элемента QGraphicsItem в QGraphicsLayout

Код:
#ifndef MYGRAPHICSLAYOUTITEM_H
#define MYGRAPHICSLAYOUTITEM_H

#include <QtGui>

class MyGraphicsLayoutItem : public QGraphicsRectItem, public QGraphicsLayoutItem
{

public:
    MyGraphicsLayoutItem(QGraphicsScene *scene)
        : QGraphicsRectItem(0, scene)
    {

    }

    virtual ~MyGraphicsLayoutItem()
    {

    }

    virtual void setGraphicsItem(QGraphicsItem *item)
    {
        QGraphicsLayoutItem::setGraphicsItem(item);
    }

    virtual void setGeometry(const QRectF &r)
    {
        setRect(r);
    }

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

        const QRect r = option->rect.adjusted(0, 0, -1, -1);
        painter->save();
        painter->setBrush(QColor(255, 0, 0, 70));
        painter->setPen(QColor(Qt::red));
        painter->drawRect(r);
        painter->restore();
    }

protected:
    QSizeF sizeHint(Qt::SizeHint which, const QSizeF& constraint = QSizeF()) const
    {
        Q_UNUSED(which);
        Q_UNUSED(constraint);

        return QSizeF();
    }
};

#endif // MYGRAPHICSLAYOUTITEM_H



При добавлении в QGraphicsGridLayout QGraphicsWidgets элементы расположены нормально по сетке, а при добавлении MyGraphicsLayoutItem они сбиваются в первой ячейке.


Код:
    QGraphicsGridLayout *layout = new QGraphicsGridLayout;

    layout->setSpacing(10);
    QGraphicsWidget *form = new QGraphicsWidget;
    form->setLayout(layout);
    scene->addItem(form);
    int count = 20;
    int r = count / (count / 10);
    r = 5;
    for (int i=0; i<count; ++i) {
        if(0){
            QGraphicsWidget *pushButton = scene->addWidget(new QPushButton(QString("%1").arg(i)));
            layout->addItem(pushButton, i % r, i / r);
        }else{
            QGraphicsTextItem *gText = new QGraphicsTextItem(QString("%1").arg(i));
            gText->setDefaultTextColor(Qt::blue);
            MyGraphicsLayoutItem *mLayoutItem = new MyGraphicsLayoutItem(scene);
            mLayoutItem->setGraphicsItem(gText);
            layout->addItem(mLayoutItem, i % r, i / r, Qt::AlignCenter);
        }
    }

Подскажите, как можно решить данную проблему.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.043 секунд. Запросов: 20.