我想将QGraphicsScene中的所有项目保存到文件中。当我加载文件时,我应该能够将它们用作QGraphicsItems(如前所述)。我将我的项目保存在QList中,如QGraphicsItems的QList,我称之为mItemsOnScreen。我应该能够在加载文件时返回该列表。如何将这些项目保存到磁盘上的文件中。我应该使用什么样的文件格式?当然,我将如何阅读该文件?请帮助一下......并提前感谢。
我已经这样做但它保存了图像格式:
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é !");
} }
答案 0 :(得分:2)
我将如何做到这一点。此代码仅代表一般逻辑,您可能需要对其进行编辑才能使其正常工作。
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;
}
}