QT中的问题

QT 问题1(QFile)

项目场景:

QT中利用QFile将QList写入txt 或者其他的文件,QDataStream可以直接写入QList,<< list,但是其写入的文件是二进制的,不方便阅读(需要保存的数据量很小)因此采用QTextStream的方式。

问题描述:

在保存数据时候,遇到一个很奇怪的指针的问题

  1. 代码Ⅰ:
void MainWindow::Save_list(QList<int> seqNew,QString seq_string)//problem
{
    QFile file("../filename.csv");
    if (file.open(QIODevice::ReadWrite | QIODevice::Text))
    {
        QTextStream stream(&file);
        stream.seek(file.size());
        stream << seq_string << "\n";
        file.close();
        }
}

此时可以写出List的名称

ABB
  1. 代码II
void MainWindow::Save_list(QList<int> seqNew,QString seq_string)//problem
{
    QFile file("../filename.csv");
    if (file.open(QIODevice::ReadWrite | QIODevice::Text))
    {
        QTextStream stream(&file);
        stream.seek(file.size());
        stream << seq_string << "\n";
       for(int i=0; i<seqNew.size(); i++  ){
            int temp_list=seqNew.takeFirst();
                stream.seek(file.size());
                stream << temp_list<< "\n";
            }
        file.close();
    }
}

此时写出的

3
ABB
4
5

变量名前面会有一个数字出现


原因分析:

肯定是指针问题,&file应该是指到了file的首个物理地址seek那里应该是寻找最后一个物理地址,感觉是在第二次寻找物理地址的时候并没有更新出最后的物理地址还是之前的,因此才会出现错误,但是还是不知道为什么不会更新?????


解决方案:

3. 代码III

void MainWindow::Save_list(QList<int> seqNew,QString seq_string)//problem
{
    QFile file("../filename.csv");
    if (file.open(QIODevice::ReadWrite | QIODevice::Text))
    {
        QTextStream stream(&file);
        stream.seek(file.size());
        stream << seq_string << "\n";
        file.close();}
    if (file.open(QIODevice::ReadWrite | QIODevice::Text))
    {
       for(int i=0; i<seqNew.size(); i++  ){
            int temp_list=seqNew.takeFirst();
            QTextStream stream(&file);
                stream.seek(file.size());
                stream << temp_list<< "\n";
            }
        file.close();
    }
}

将文件重新关上打开最后可以正常的完成想要的功能。

ABB
3
4
5

QT 2 获得的当前时间保存成文件名

QDateTime time=QDateTime::currentDateTime();
QString filename=time.toString("yyyy_MM_dd_hh_mm_ss");
QFile file("../video/"+filename+".csv");

将获得的当前时间保存成文件名

QT slider 设计

需求

slider 但是只在固定的点停留点,类似于视觉模拟评分
在这里插入图片描述

方案

百度后确定方案是继承qslider写一个myslider类,在manwindow里面调用该类,放到一个容器中,需要重写鼠标点击和释放事件。没采用直接从Qwidget类开始构建,主要是因为我菜,不想太复杂。
参考链接https://blog.csdn.net/nchu_zhangyiqing/article/details/122490710
cpp 文件和 h 文件可以参考第一个链接
主要是重写

void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void paintEvent(QPaintEvent *ev);

有个地方需要补充
myslider.cpp文件里面需要补充

MySlider::~Myslider()
{
}

调用

在主程序里面建立一个新的myslider 类,使用connect将myslider里面的鼠标释放的信号和主程序里面的空间连接起来,写对应的槽函数可以将slider对应的数值显示出来。
在具体的调用上参考
https://blog.csdn.net/qq_28351609/article/details/88818337?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0.pc_relevant_aa&spm=1001.2101.3001.4242.1&utm_relevant_index=3
利用信号槽机制在主程序中获得当前slider的位置

connect(slider, SIGNAL(valueChanged(int)), this, SLOT(setLineEditValue(int)));

在主程序里面设计槽函数方便显示滑动条的值

void MyDialog::setLineEditValue(int value)
{
  int pos = slider->value();
  QString str = QString("%1").arg(pos);
  lineEdit->setText(str);
}

具体设计

在myslider的具体设计里面,具体的设置参考官方文档:中文可以参考https://www.wenjiangs.com/doc/nbvqslfi
https://blog.csdn.net/qq_47520825/article/details/115479514
在这里插入图片描述

指针

从机器语言就开始学,但是经常还是弄混

指针是一个变量

它的值是一个地址

& 取值
* 访问指针中地址的值

参考:
C++指针的介绍

数组名是一个特殊的指针

从局部变量表可以看出,数组a和指针p的构成是很相似的。它们实际存的都是一个地址,都会指向一个对象(或多个对象的第一个对象)。所以说数组名其实是种特殊的指针。
参考
数组名指针的解释

具体的函数

strcpy 对字符串进行拷贝

typedef 关键字 定义结构和非结构类型

typedef

使用初始化列表来初始化字段

类的构造函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值