2026.1.4随笔:实习第十天(开工大吉,依旧牛马)

上午把我做的之前的函数接口提交了,mentor看了说有一些要改的,大概意思就是函数写的太长了,而且逻辑不够优雅,然后就把函数解耦了一下,逻辑优化了一下

下午主要是和mentor开了个会对了一下需求,然后mentor给我说新建一个结构树节点边界条件,添加一个按钮导入文件,自定义把模型文件拷贝到工作目录

我写出来一版后,mentor说不需要使用Qt原生的文件选择框,然后给我看了一个使用封装好的文件选择的样例,然后我照着那个样例改了一下整个的逻辑然后跑通了


小tips:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
QTextStream out(&file);
out.setCodec("UTF-8"); // 设置编码为 UTF-8
out << "*MEDIUM_DNSTY\n";
out << QString::number(m_pAcousticMP->getMediumDnsty()) << "\n";
out << "*SOUND_SPEED\n";
out << QString::number(m_pAcousticMP->getSoundSpeed()) << "\n";
out << "*SOURCE\n";
out << QString::number(sourceType) << "\n";

if(sourceType == 1) {
out << "*NFLX\n"
<< QString::number(m_pIncidentSS->getNFLX()) << "\n";
out << "*FLXV\n"
<< QString::number(m_pIncidentSS->getFLXV()) << "\n";
}

out << "*FREQ_STRT\n"
<< QString::number(m_pCalcFreq->getFreqStart()) << "d0\n"
<< "*FREQ_END\n"
<< QString::number(m_pCalcFreq->getFreqEnd()) << "d0\n"
<< "*FREQ_STEP\n"
<< QString::number(m_pCalcFreq->getFreqStep()) << "d0\n";
file.close();

将上面的代码改成下面的,除了添加函数封装,在写入out的时候没有QString::number()函数做中间处理这样写是可以的。因为QTextStream<<运算符做了重载

1
2
3
QTextStream& operator<<(int);
QTextStream& operator<<(double);
QTextStream& operator<<(float);

所以这两者是完全等价的,Qt还是要比标准C++方便一些。

只有在你需要“控制格式”时才会遇到QString::number()

image-20260104114238920

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
bool ACFEADataManager::writeSolverFile(const QString& filePath, int sourceType) {
QFile file(filePath);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
qWarning() << "Unable to open" << filePath << "for writing.";
return false;
}

QTextStream out(&file);
out.setCodec("UTF-8");

out << "*MEDIUM_DNSTY\n"
<< m_pAcousticMP->getMediumDnsty() << "\n"
<< "*SOUND_SPEED\n"
<< m_pAcousticMP->getSoundSpeed() << "\n"
<< "*SOURCE\n"
<< sourceType << "\n";

if (sourceType == 1) {
out << "*NFLX\n"
<< m_pIncidentSS->getNFLX() << "\n"
<< "*FLXV\n"
<< m_pIncidentSS->getFLXV() << "\n";
}

out << "*FREQ_STRT\n"
<< m_pCalcFreq->getFreqStart() << "d0\n"
<< "*FREQ_END\n"
<< m_pCalcFreq->getFreqEnd() << "d0\n"
<< "*FREQ_STEP\n"
<< m_pCalcFreq->getFreqStep() << "d0\n";

return true;
}