Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сохранить/загрузить в файл QGraphicsItem
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
Ponchikus
Здравствуйте!
Прошу помочь решить проблему. Есть сцена(QGraphicsScene). Пытаюсь все объекты со сцены сохранить в какой-нибудь файл, и потом их загрузить обратно на сцену. Пытался сделать следующее:
save

void Diagram::save()
{
    QList<QGraphicsItem*> item=scene->items();
    QFile file("File.txt");
    file.open(QIODevice::WriteOnly);

    if(!file.isOpen())
    {
        qDebug()<<file.errorString();
    }

    QDataStream stream(&file);
    size_t x=0;
    while(x<item.size())
    {
        QGraphicsItem *i=item.at(x);
        stream<<i->pos();
        stream<<i->flags();
        stream<<i->parentObject();
        x++;

    }

    file.flush();
    file.close();
}

load
void Diagram::load()
{
    QString str=QFileDialog::getOpenFileName(this);
    QFile file(str);
    file.open(QIODevice::ReadOnly);
    if(!file.isOpen())
    {
        qDebug()<<file.errorString();
    }
    QList<QGraphicsItem*> item;

    QDataStream stream(&file);
    while(!stream.atEnd())
    {
          QGraphicsItem* i;
          QPointF pt;
          stream>>pt;
          i->setPos(pt);

          QFlags<Qt::ItemFlags> f;  // на этом моменте и застрял, выдает ошибки

    }

}


Если я пытаюсь сделать не правильно, подскажи в какую сторону смотреть. Спасибо!
Ponchikus
Решил проблему так:
Раскрывающийся текст

class Node: public QGraphicsItem
{
...
public:
...
    enum { Type = UserType+1};

    int type() const
    {
        return Type;
    }
...


save

void Diagram::save()
{
    QFile file("File.bin");
    file.open(QIODevice::WriteOnly);
    if(!file.isOpen())
    {
        qDebug()<<file.errorString();
    }

    QDataStream stream(&file);
    QList<QGraphicsItem*> item=scene->items();
    foreach(QGraphicsItem *i,item)
    {

        if(Node *n=qgraphicsitem_cast<Node*>(i))
        {
            quint32 x=n->type();
            stream<<x;
            stream<<n->pos();
            stream<<n->text();
            stream<<n->textColor();
            stream<<n->backgroundColor();
            stream<<n->outlineColor();
        }
    }

    file.flush();
    file.close();
}



load

void Diagram::load()
{
    QFile file("File.bin");
    file.open(QIODevice::ReadOnly);

    QDataStream stream(&file);
    while(!stream.atEnd())
    {
        quint32 x=0;
        stream>>x;
        switch(x)
        {
        case Node::Type:
{
            Node *n=new Node;
            QPointF pt;
            stream>>pt;
            n->setPos(pt);
            QString text;
            QColor color;
            stream>>text;
            n->setText(text);
            stream>>color;
            n->setTextColor(color);
            stream>>color;
            n->setBackgroundColor(color);
            stream>>color;
            n->setOutlineColor(color);
            scene->addItem(n);
}
            break;
        default:qDebug()<<"Error";
            break;
        }
    }
}


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.