我想将 QGraphicsScene 中的所有项目保存到文件中。当我加载文件时,我应该能够将它们用作 QGraphicsItems(像以前一样)。
我将我的项目保存在名为
mItemsOnScreen
的 QList 中。当我加载文件时,我应该能够取回该列表。
如何将这些项目保存到磁盘上的文件中。我应该使用什么样的文件格式?当然,我将如何读回该文件?
我已经这样做了,但它以图像格式保存:
void MainWindow::loadImage()
{
QString fichier = QFileDialog::getOpenFileName(this,
tr("Open Image"),
"C:/",
tr("Image Files (*.png *.jpg *.bmp)"));
if(fichier != "")
{
//QGraphicsView *vue = new QGraphicsView(scene);
QPixmap monPixmap(fichier);
scene->addPixmap(monPixmap);
if(monPixmap.load(fichier))
QMessageBox::information(0,"Chargement réussi","Le Diagrame a bien été chargé !");
else
QMessageBox::critical(0,"Erreur de Chargement","Le Chargement du Diagrame a échoué !");
}
}
我将这样做。此代码仅代表一般逻辑,您可能需要对其进行编辑才能使其工作。
QVariant item_to_variant(QGraphicsItem* item) {
QVariantHash data;
//save all needed attributes
data["pos"] = item->pos();
data["rotation"] = item->rotation();
if(QGraphicsPixmapItem* pixmap_item = dynamic_cast<QGraphicsPixmapItem*>(item)) {
data["type"] = "pixmap";
data["pixmap"] = pixmap_item->pixmap();
} else { /*...*/ }
//...
return data;
}
QGraphicsItem* item_from_variant(QVariant v) {
QVariantHash data = v.toHash();
QGraphicsItem* result;
if (data["type"].toString() == "pixmap") {
result = new QGraphicsPixmapItem();
result->setPixmap(data["pixmap"].value<QPixmap>());
} else { /*...*/ }
result->setPos(data["pos"].toPointf());
result->setRotation(data["rotation"].toDouble());
//...
return result;
}
void save_state() {
QVariantList data_list;
foreach(QGraphicsItem* item, items_list) {
data_list << item_to_variant(item);
}
QSettings settings;
settings.setValue("items", data_list);
}
void restore_state() {
QSettings settings;
foreach(QVariant data, settings.value("items").toList()) {
QGraphicsItem* item = item_from_variant(data);
scene->addItem(item);
items_list << item;
}
}