[英]Write/Read Struct To/From File
我是使用流和處理FileWriter的新手。 這是我通過搜索示例/解決方案得到的:
struct vertex_info{
QPointF pos;
int type;
};
struct graph_info{
vertex_info all_vertices[];
};
QDataStream &operator<<(QDataStream &out, const vertex_info &v){
out << v.pos << v.type;
return out;
}
QDataStream &operator<<(QDataStream &out, const graph_info &g){
int n = sizeof(g.all_vertices);
for(int i=0; i<n ;i++){
out<<g.all_vertices[i];
}
return out;
}
QDataStream &operator>>(QDataStream &in, graph_info &g){
//vertex_info vertex_array[];
return in;
}
QDataStream &operator>>(QDataStream &in, vertex_info &v){
return in;
}
void MainWindow::on_button_save_clicked(){
QString s = this->ui->lineEdit->text();
this->ui->lineEdit->clear();
vmap::iterator itr = myLogic->set.begin();
graph_info my_graph;
vertex_info vinfo;
int i = 0;
while(itr != myLogic->set.end()){
vinfo.pos = itr->second->pos;
vinfo.type = itr->second->type;
my_graph.all_vertices[i] = vinfo;
itr++;
i++;
}
QFile file("test.dat");
file.open(QIODevice::WriteOnly);
QDataStream stream(&file);
stream << my_graph;
file.close();
}
void MainWindow::on_button_load_clicked(){
this->on_button_clear_clicked();
graph_info my_graph;
QString s = this->ui->box_select_graph->currentText();
QFile file("test.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
in >> my_graph;
int i=0;
while(i<sizeof(my_graph.all_vertices)){
QString posx = QString::number(my_graph.all_vertices[i].pos.x());
QString posy = QString::number(my_graph.all_vertices[i].pos.y());
QString type = QString::number(my_graph.all_vertices[i].type);
cout<<posx<<" "<<posy<<" "<<type<<'\n';
}
}
所以我仍然沒有為兩個結構實現in流,因為我真的不知道它是如何工作的。
有什么建議/解決方案嗎? :/
首先,我假設您在這里使用C ++。 因此,在struct graph_info
您將想要
std::vector<vertex_info> all_vertices;
然后在QDataStream &operator<<
size_t n = g.all_vertices.size();
同樣在QDataStream &operator<<
您可能想要將頂點數量寫出到流中,以便讀者能夠首先閱讀該頂點,從而知道要閱讀多少個頂點。
完成后,您將可以在一個更好的地方開始編寫>>
運算符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.