Qt輸入與輸出
QSetting 使用
一、 在windows中修改註冊表:
a) 寫註冊表,將程序信息保存到註冊表的Software Inc. Spreadsheet下
QSettings settings("Software Inc.", "Spreadsheet");
settings.setValue("showGrid", showGridAction->isChecked());
settings.setValue("autoRecalc", autoRecalcAction->isChecked());
b) 讀註冊表
QSettings settings("Software Inc.", "Spreadsheet");
bool showGrid = settings.value("showGrid", true).toBool();
bool autoRecalc = settings.value("autoRecalc", true).toBool();
二、 讀寫文件
QSettings settings("./myapp.ini", QSettings::IniFormat); // ./myapp.ini——同級目錄下的myapp.ini文件
settings.setValue("name",1);
QSettings settings("../myapp.ini",QSettings::IniFormat); //../myapp.ini——上級目錄下的myapp.ini文件
settings.setValue("name",1);
讀寫文件——QDataStream和QTextStream
QDataStream——讀寫二進制文件,讀寫二進制文件時需首先設置Qt的版本。
bool Spreadsheet::writeFile(const QString &fileName)
{
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly)) //打開失敗警告
{
QMessageBox::warning(this, tr("Spreadsheet"),
tr("Cannot write file %1:\n%2.")
.arg(file.fileName())
.arg(file.errorString()));
return false;
}
QDataStream out(&file);
out.setVersion(QDataStream::Qt_4_3); //設置版本,保證讀取寫入格式的一致性
out << quint32(MagicNumber); //校準信息
QApplication::setOverrideCursor(Qt::WaitCursor); //鼠標等待
//循環寫入 for (int row = 0; row < RowCount; ++row) {
for (int column = 0; column < ColumnCount; ++column) {
QString str = formula(row, column);
if (!str.isEmpty())
out << quint16(row) << quint16(column) << str;
}
}
QApplication::restoreOverrideCursor(); //結束
return true;
}
bool Spreadsheet::readFile(const QString &fileName)
{
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly))
{
QMessageBox::warning(this, tr("Spreadsheet"),
tr("Cannot read file %1:\n%2.")
.arg(file.fileName())
.arg(file.errorString()));
return false;
}
QDataStream in(&file);
in.setVersion(QDataStream::Qt_4_3);
//校準驗證
quint32 magic;
in >> magic;
if (magic != MagicNumber)
{
QMessageBox::warning(this, tr("Spreadsheet"),
tr("The file is not a Spreadsheet file."));
return false;
}
quint16 row;
quint16 column;
QString str;
QApplication::setOverrideCursor(Qt::WaitCursor); //讀取
while (!in.atEnd()) {
in >> row >> column >> str;
setFormula(row, column, str);
}
QApplication::restoreOverrideCursor();
return true;
}