QT 保存控件信息到路径文本以及加载文本信息改变控件信息

要求

 单击保存把带宽,增益数据输出到文本中。

实现代码:

    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当前的值。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值