QDataStream提拱了一个二进制的数据流,并且与程序运行的操作系统平台无关。利用QDataStream类可以方便地保存和读取各类数据。例如,在实现应用中常需要保存用户设置的参数,以便下次运行时烣复关闭时的参数设置,可需要与其他程序交互参数等。
pararw.h:
#ifndef PARARW_H #define PARARW_H #include <QDialog> class QLabel; class QPushButton; class QLineEdit; class QComboBox; class QSpinBox; class ParaRW : public QDialog { Q_OBJECT public: ParaRW(); QLabel *label1; QLabel *label2; QLabel *label3; QLabel *label4; QLabel *label5; QLabel *timeLabel; QPushButton *saveButton; QPushButton *getButton; QComboBox *powerComboBox; QSpinBox *channelSpinBox; QLineEdit *frequencyEdit; public slots: void slotSave(); void slotGet(); }; #endif // PARARW_H
pararw.cpp:
#include "pararw.h" #include <QtGui> ParaRW::ParaRW() { QFont f("ZYSong18030",12); setFont(f); setWindowTitle(tr("QDataStrem")); label1 = new QLabel(tr("Channel:")); label2 = new QLabel(tr("Power:")); label3 = new QLabel(tr("Frequency:")); label4 = new QLabel(tr("MHz")); label5 = new QLabel(tr("Last save time:")); timeLabel = new QLabel; saveButton = new QPushButton(tr("Save")); getButton = new QPushButton(tr("Get")); channelSpinBox = new QSpinBox; channelSpinBox->setRange(0,10); powerComboBox = new QComboBox; powerComboBox->insertItem(0,tr("small")); powerComboBox->insertItem(1,tr("mid")); powerComboBox->insertItem(2,tr("big")); frequencyEdit = new QLineEdit; QGridLayout *layout = new QGridLayout(this); layout->setMargin(20); layout->setSpacing(10); layout->addWidget(label1,0,0); layout->addWidget(channelSpinBox,0,1); layout->addWidget(label2,1,0); layout->addWidget(powerComboBox,1,1); layout->addWidget(label3,2,0); layout->addWidget(frequencyEdit,2,1); layout->addWidget(label4,2,2); layout->addWidget(label5,0,2); layout->addWidget(timeLabel,0,3); layout->addWidget(saveButton,1,3); layout->addWidget(getButton,2,3); connect(saveButton,SIGNAL(clicked()),this,SLOT(slotSave())); connect(getButton,SIGNAL(clicked()),this,SLOT(slotGet())); } void ParaRW::slotSave() { int channel = channelSpinBox->value(); int power = powerComboBox->currentIndex(); float frequency = frequencyEdit->text().toFloat(); QDateTime *time = new QDateTime; QFile file("parameters.dat"); file.open(QIODevice::WriteOnly); QDataStream out(&file); out.setVersion(QDataStream::Qt_4_0); out << (quint32)0xa1a2a3a4; out << (qint32)channel << (qint32)power << frequency << time->currentDateTime(); } void ParaRW::slotGet() { QFile file("parameters.dat"); file.open(QIODevice::ReadOnly); QDataStream in(&file); in.setVersion(QDataStream::Qt_4_0); qint32 magic; in >> magic; if (magic != 0xa1a2a3a4) { QMessageBox::information(this,"exception",tr("invalide file format")); return; } qint32 channel; qint32 power; float frequency; QDateTime time; in >> channel >> power >> frequency >> time; channelSpinBox->setValue(channel); powerComboBox->setCurrentIndex(power); QString freq; frequencyEdit->setText(freq.setNum(frequency)); QString lastTime = time.date().toString(Qt::ISODate) + " " + time.time().toString(); timeLabel->setText(lastTime); }
#include <QApplication> #include <QTranslator> #include "pararw.h" int main(int argc, char *argv[]) { // QFont f("ZYSong18030",12); // QApplication::setFont(f); QApplication app(argc,argv); QTranslator translator; translator.load("datastream_zh"); app.installTranslator(&translator); ParaRW *para = new ParaRW(); para->show(); return app.exec(); }
datastream.pro:
###################################################################### # Automatically generated by qmake (2.01a) ?? ?? 10 19:03:31 2008 ###################################################################### TEMPLATE = app TARGET = DEPENDPATH += . INCLUDEPATH += . # Input HEADERS += pararw.h SOURCES += main.cpp pararw.cpp TRANSLATIONS += datastream_zh.ts