Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Digan от Март 06, 2011, 14:00



Название: QTableWidget - сохранение в XML
Отправлено: Digan от Март 06, 2011, 14:00
Есть ли в Qt механизм для упрощения сохранения структуры таблицы QTableWidget в формат XML? Или придется в ручную строить всю структуру XML? Или может есть другой способ сохранения таблицы?

Заранее спасибо.


Название: Re: QTableWidget - сохранение в XML
Отправлено: Stiff от Март 06, 2011, 22:14
Или придется в ручную строить всю структуру XML? Или может есть другой способ сохранения таблицы?
Стандартных механизмов для этого нет, вы сами должны определить структуру файла. А вот для записи используйте qxmlstreamwriter или модуль QtXML


Название: Re: QTableWidget - сохранение в XML
Отправлено: Авварон от Март 07, 2011, 01:49
Пожалуйста, не делайте этого. Не далее как 5 дней назад пришлось парсить хмл, написанный такими "умниками". 66 метров файлик весил, причем реально нужных данным там метров 20, остальное - инфа о размере ячеек, шрифтах и стилях оформления (да-да, на каждую ячейку хранились ее видтх и хейгхт, а также все параметры). При этом различия были только в столбцах. Вместо 20 полей по столбцам хранилось 20*20000 веселых тегов.
Так что напишите свой формат, обычно нужно даже не все данные, а например можно айдишник выцепить, по к-ому данные можно восстановить.


Название: Re: QTableWidget - сохранение в XML
Отправлено: Digan от Март 07, 2011, 16:00
Да мне только информацию из ячеек и нужно хранить, плюс количество строк к таблице.

Жаль, что нет возможности быстро таблицу перенести в xml.
Когда знакомился с Bold MDA там была такая возможность. Но как Bold так и Delphi считаю мертвыми.

Что же. Буду в ручную заполнять xml. А свой формат это слишком для такой задачи.
У xml к тому есть большой плюс - его целостность легко проверяется.  


Название: Re: QTableWidget - сохранение в XML
Отправлено: Пантер от Март 09, 2011, 10:08
Вот когда-то писал для себя экспорт модели в xml. Думаю, пригодится.
Код
C++ (Qt)
void DBFRedactorMainWindow::exportToXml(const QString& fileName)
{
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly)) {
QMessageBox::critical(this, "", tr("Error save to file.\n%1").arg(file.errorString()));
return;
}
 
QXmlStreamWriter stream(&file);
stream.setAutoFormatting(true);
stream.writeStartDocument();
stream.writeStartElement("ROWDATA");
 
for (int i = 0, rowCount = view->model()->rowCount(); i < rowCount; i++) {
stream.writeStartElement("ROW");
 
for (int j = 0, columnCount = view->model()->columnCount(); j < columnCount; j++) {
const QVariant& value = view->model()->index(i, j).data(Qt::DisplayRole);
stream.writeTextElement(view->model()->headerData(j, Qt::Horizontal, Qt::EditRole).toString(),
value.toString());
}
stream.writeEndElement();
}
 
stream.writeEndElement();
stream.writeEndDocument();
file.close();
 
QMessageBox::information(this, "", tr("Export finished"));
}