void MainWindow::surveyData()
{
int math=0, chinese=0, english=0;
for (int i = 0; i < iniDataRowCount; i++)
{
QStandardItem *aItem= theModel->item(i, 1);
int text = aItem->text().toInt();
if (text < 60)
math++;
}
QString Math = QString::number(math);
math = 0;
for (int i = 0; i < iniDataRowCount; i++)
{
QStandardItem* aItem = theModel->item(i, 2);
int text = aItem->text().toInt();
if (text < 60)
chinese++;
}
QString Chinese = QString::number(chinese);
chinese = 0;
for (int i = 0; i < iniDataRowCount; i++)
{
QStandardItem* aItem = theModel->item(i, 3);
int text = aItem->text().toInt();
if (text < 60)
english++;
}
QString English = QString::number(english);
english = 0;
QStringList headerList;
headerList << " 分数段" << "数学" <<"语文"<< "英语";
ui.treeWidget->setHeaderLabels(headerList);
QTreeWidgetItem* item;
item = new QTreeWidgetItem(1001);
item->setText(0, "60分以下");
item->setText(1, Math);
item->setText(2, Chinese);
item->setText(3, English);
ui.treeWidget->addTopLevelItem (item);
for (int i = 0; i < iniDataRowCount; i++)
{
QStandardItem* aItem = theModel->item(i, 1);
int text = aItem->text().toInt();
if (text > 60&&text<69)
math++;
}
QString Math1 = QString::number(math);
math = 0;
for (int i = 0; i < iniDataRowCount; i++)
{
QStandardItem* aItem = theModel->item(i, 2);
int text = aItem->text().toInt();
if (text > 60&&text<69)
chinese++;
}
QString Chinese1 = QString::number(chinese);
chinese = 0;
for (int i = 0; i < iniDataRowCount; i++)
{
QStandardItem* aItem = theModel->item(i, 3);
int text = aItem->text().toInt();
if (text > 60&&text<69)
english++;
}
QString English1 = QString::number(english);
english = 0;
item = new QTreeWidgetItem(1002);
item->setText(0, "60-69分");
item->setText(1, Math1);
item->setText(2, Chinese1);
item->setText(3, English1);
ui.treeWidget->addTopLevelItem(item);
for (int i = 0; i < iniDataRowCount; i++)
{
QStandardItem* aItem = theModel->item(i, 1);
int text = aItem->text().toInt();
if (text > 70 && text < 79)
math++;
}
QString Math2 = QString::number(math);
math = 0;
for (int i = 0; i < iniDataRowCount; i++)
{
QStandardItem* aItem = theModel->item(i, 2);
int text = aItem->text().toInt();
if (text > 70 && text < 79)
chinese++;
}
QString Chinese2 = QString::number(chinese);
chinese = 0;
for (int i = 0; i < iniDataRowCount; i++)
{
QStandardItem* aItem = theModel->item(i, 3);
int text = aItem->text().toInt();
if (text > 70 && text < 79)
english++;
}
QString English2 = QString::number(english);
english = 0;
item = new QTreeWidgetItem(1003);
item->setText(0, "70-79分");
item->setText(1, Math2);
item->setText(2, Chinese2);
item->setText(3, English2);
ui.treeWidget->addTopLevelItem(item);
for (int i = 0; i < iniDataRowCount; i++)
{
QStandardItem* aItem = theModel->item(i, 1);
int text = aItem->text().toInt();
if (text > 80 && text < 89)
math++;
}
QString Math3 = QString::number(math);
math = 0;
for (int i = 0; i < iniDataRowCount; i++)
{
QStandardItem* aItem = theModel->item(i, 2);
int text = aItem->text().toInt();
if (text > 80 && text < 89)
chinese++;
}
QString Chinese3 = QString::number(chinese);
chinese = 0;
for (int i = 0; i < iniDataRowCount; i++)
{
QStandardItem* aItem = theModel->item(i, 3);
int text = aItem->text().toInt();
if (text > 80 && text < 89)
english++;
}
QString English3 = QString::number(english);
english = 0;
item = new QTreeWidgetItem(1004);
item->setText(0, "80-89分");
item->setText(1, Math3);
item->setText(2, Chinese3);
item->setText(3, English3);
ui.treeWidget->addTopLevelItem(item);
for (int i = 0; i < iniDataRowCount; i++)
{
QStandardItem* aItem = theModel->item(i, 1);
int text = aItem->text().toInt();
if (text > 90)
math++;
}
QString Math4 = QString::number(math);
math = 0;
for (int i = 0; i < iniDataRowCount; i++)
{
QStandardItem* aItem = theModel->item(i, 2);
int text = aItem->text().toInt();
if (text > 90)
chinese++;
}
QString Chinese4 = QString::number(chinese);
chinese = 0;
for (int i = 0; i < iniDataRowCount; i++)
{
QStandardItem* aItem = theModel->item(i, 3);
int text = aItem->text().toInt();
if (text > 90)
english++;
}
QString English4 = QString::number(english);
english = 0;
item = new QTreeWidgetItem(1005);
item->setText(0, "90分以上");
item->setText(1, Math4);
item->setText(2, Chinese4);
item->setText(3, English4);
ui.treeWidget->addTopLevelItem(item);
}
大佬们,这个代码有办法简化吗?
目测可以提炼出函数,避免重复编写。
不知道你这个问题是否已经解决, 如果还没有解决的话:Qt 串口类QSerialPort 使用笔记_Ivan 的专栏-CSDN博客
1.包含头文件
#include "QtSerialPort/QSerialPort" //提供了操作串口的各种接口
#include "QtSerialPort/QSerialPortInfo" //是一个辅助类,可以提供计算机中可用串口的各种信息
2.在pro文件中增加如下内容:
QT += serialport
3.要先获取到 可连接的所有的串口的名字
QSerialPortInfo::availablePorts()
[static] QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
Returns a list of available serial ports on the system.
返回系统上可用串行端口的列表
void MainWindow::GetSerialNames()
{
QStringList m_serialPortName;
foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
{
m_serialPortName << info.portName();
qDebug()<<"serialPortName:"<<info.portName();
}
}
通常,我们需要指定程序使用某一个确定的串口,这时不能只使用串口名称,因为USB串口每次插在不同的USB口上时获得的串口名称都可能有变化。这时可以利用串口的序列号,这个号码一般来说是唯一的,比如下面的代码,首先遍历所有的串口,找到我们需要的串口后就返回。
QSerialPort 负责具体的串口操作。选定串口后,要先打开串口,才能设置波特率等参数。这些参数都设置好了就可以使用了。最基本的操作无非是read() 和 write()。需要注意的是这两个操作都是非阻塞的。
另外有一个重要的signal 也需要用到,那就是 void QIODevice::readyRead()
每次串口收到数据后都会发出这个signal。我们的程序中需要定义一个slot,并将其与这个signal 相连接。这样,每次新数据到来后,我们就可以在slot中读取数据了。这时一定要将串口缓冲区中的数据全部读出来,可以利用readAll() 来实现。
QT的串口类QSerialPort_FunkyFrog821951259的博客-CSDN博客
4.根据串口名字,打开相应串口
作为一名资深的IT专家,我可以给你一些关于简化代码的建议:
将一些常用的计算任务或数据处理操作封装成函数或类,这样可以避免代码的重复,提高代码的重用性。例如,对于一些重复的操作,可以将其封装成一个函数,以便于多次调用。
在数据分析和计算任务中,算法优化可以大大提高代码的性能和效率。比如,可以尝试使用更高效的算法和数据结构,以减少程序的运行时间。
对于一些常用的计算和数据分析任务,可以使用相关的库和框架来完成,而不需要自己编写冗长的代码。例如,对于数据分析任务,可以使用Pandas库;对于机器学习任务,可以使用Scikit-learn库。
在编写程序时,可以使用环境变量来指定一些常用路径和配置信息,这样可以避免在程序中重复输入这些信息,减少代码的冗长。例如,可以使用os模块中的os.environ变量来获取和设置环境变量信息。
总之,简化代码的关键在于合理利用函数、类、算法和库,同时使用环境变量等工具来提高代码的可读性和可维护性。
void MainWindow::surveyData()
{
QStringList headerList;
headerList << " 分数段" << "数学" <<"语文"<< "英语";
ui.treeWidget->setHeaderLabels(headerList);
for(int j=0;j<5;j++){ //j表示分数段的等级
int math=0, chinese=0, english=0;
QString level;
if(j==0){
level="60分以下";
}else if(j==1){
level="60-69分";
}else if(j==2){
level="70-79分";
}else if(j==3){
level="80-89分";
}else{
level="90分以上";
}
for (int i = 0; i < iniDataRowCount; i++)
{
QStandardItem *aItem= theModel->item(i, 1+j);
int text = aItem->text().toInt();
if (text < 60+j*10 && text >= 50+j*10) //根据分数段等级计算分数范围
math++;
else if(text < 60+j*10 && text < 50+j*10)
continue;
else if(text >= 60+j*10 && text < 70+j*10)
chinese++;
else if(text >= 70+j*10 && text < 80+j*10)
english++;
else
continue;
}
QString Math = QString::number(math);
QString Chinese = QString::number(chinese);
QString English = QString::number(english);
QTreeWidgetItem* item = new QTreeWidgetItem(1001+j);
item->setText(0, level);
item->setText(1, Math);
item->setText(2, Chinese);
item->setText(3, English);
ui.treeWidget->addTopLevelItem (item);
}
}
改动说明:
将创建树形控件的表头的代码放在最初部分。
使用循环来简化代码,避免重复编写相似的代码。用j表示分数段等级,通过计算分数范围来统计各科分数段的学生人数。
删除了一些冗余的变量,并对变量进行命名。