要求
单击保存把带宽,增益数据输出到文本中。
实现代码:
mywidget.cpp
void mywidget::saveAs()
{
QString path = QFileDialog::getOpenFileName(this, "保存数据","E:\\CZR\\qt project\\新建文件夹");
QFile file(path);
file.open(QIODevice::WriteOnly);
QTextStream out(&file);
QString temp = "";
temp.append("通道一\n");
temp.append("带宽:");
temp.append(ui->widget->combox());
temp.append("\n增益:");
temp.append(ui->widget->doublespinbox());
temp.append("\n通道二\n");
temp.append("带宽:");
temp.append(ui->widget_2->combox());
temp.append("\n增益:");
temp.append(ui->widget_2->doublespinbox());
temp.append("\n通道三\n");
temp.append("带宽:");
temp.append(ui->widget_3->combox());
temp.append("\n增益:");
temp.append(ui->widget_3->doublespinbox());
temp.append("\n通道四\n");
temp.append("带宽:");
temp.append(ui->widget_4->combox());
temp.append("\n增益:");
temp.append(ui->widget_4->doublespinbox());
out.setCodec("UTF-8");
out << temp << endl;
out.flush();
file.close();
}
channal.cpp
QString channal::combox()
{
return ui->comboBox->currentText();
}
QString channal::doublespinbox()
{
double num = ui->doubleSpinBox->value();
QString str = QString::number(num);
return str;
}
通过这样能够实现把通道的数据写入文件中,如下图所示:
把载入数据重现到界面上。
实现代码:
mywidget.cpp
void mywidget::load()
{
QVector<QString> vector(10);
QString path = QFileDialog::getOpenFileName(this, "载入数据","E:\\CZR\\qt project\\新建文件夹");
QFile file(path);
file.open(QIODevice::ReadOnly);
QString *data = vector.data();
for(int i = 0; i < 10; ++i)
{
data[i] = file.readLine();
}
QString banwidth_value = data[1].mid(3,7);
if(banwidth_value == QString("2-20MHz")) //如果是带宽是”2-20MHz“则返回下标0,否则返回下标1
{
ui->widget->banwidth(0);
ui->widget_2->banwidth(0);
ui->widget_3->banwidth(0);
ui->widget_4->banwidth(0);
}
else
{
ui->widget->banwidth(1);
ui->widget_2->banwidth(1);
ui->widget_3->banwidth(1);
ui->widget_4->banwidth(1);
}
ui->textEdit->setText(banwidth_value);
qDebug() << banwidth_value;
QString gain_value_1 = data[2].mid(3,4); //返回增益值
ui->widget->gain(gain_value_1.toInt());
QString gain_value_2 = data[5].mid(3,4);
ui->widget_2->gain(gain_value_2.toInt());
QString gain_value_3 = data[8].mid(3,4);
ui->widget_3->gain(gain_value_3.toInt());
qDebug() << gain_value_1;
qDebug() << gain_value_2;
qDebug() << gain_value_3;
file.close();
}
channal.cpp
void channal::banwidth(int value)
{
ui->comboBox->setCurrentIndex(value);
}
void channal::gain(int value)
{
ui->doubleSpinBox->setValue(value);
}
实现重现数据时遇到的主要问题是如果跳到指定行把需要用到的字符串读取出来,最后还是采用了先一行行读出来,然后把每一行放到数组中,然后需要哪行就取哪一行(实现起来和C++中有点点不一样)。然后用data.mid()函数把需要的字符串给取出来,如果遇到QString转int的情况,可以用xxx.toInt()转化成int类型,最后返回给每一个控件就可以了(在控件的cpp里设置一个函数去接收值)。
一开始还有一个困扰了自己比较久的问题,就是我有一个自定义的类,然后主界面有四个widget提升成了我自定义的类,当时我就搞不清楚如何在我的主界面去调用这些已经提升了的类里面的控件(如图),其实需要在自定义类里(channal类)定义函数,去获取combox和doublespin当前的值。