c++ - 删除所有字符串后如何恢复 QStringList?
问题描述
我创建了一个按钮,单击它时应该通过串行发送命令列表以完成按钮的操作。我在 mainwindow.h 文件中定义了字符串列表,如下所示:
QStringList database_dump =
{
"STRING1",
"STRING2",
"STRING3",
"STRING4",
"STRING5",
"STRING6",
"STRING7"
};
从我的按钮单击信号中,我想提取每个字符串并将其发送到我的write_to_port
函数,如下所示:
void MainWindow::on_dump_database_clicked()
{
QString * file_name;
QByteArray key_value;
while(!database_dump.isEmpty())
{
file_name = new QString(database_dump.takeFirst());
key_value = file_name->toLatin1();
key_value.append(NEW_LINE_CR);
write_to_port(key_value);
}
}
在每个字符串之后,需要一个模拟的输入键,如图所示。
问题是:该takefirst()
方法获取字符串并将其从列表中删除。按下按钮的第一个循环效果很好。但是第二次它什么也没做,因为它QStringList
是空的。
每次单击按钮后如何重置字符串列表?
解决方案
使用foreach
or a rangedfor
而不是while
迭代字符串列表的元素,即:
void MainWindow::on_dump_database_clicked()
{
foreach (const QString &file_name, database_dump) {
QByteArray key_value(file_name->toLatin1());
key_value.append(NEW_LINE_CR);
write_to_port(key_value);
}
}
或者
void MainWindow::on_dump_database_clicked()
{
for (const QString &file_name: database_dump) {
QByteArray key_value(file_name->toLatin1());
key_value.append(NEW_LINE_CR);
write_to_port(key_value);
}
}
推荐阅读
- javascript - 我用“JS原型”编写的用户输入代码不起作用
- c# - 我应该怎么做才能显示获得有利数字需要多少循环?
- python - 自定义类的 Sklearn 管道持久性不起作用
- office-js - Word OfficeJS for Office 2016 和 WordOnline 中的通配符搜索不起作用
- javascript - 一个很好的 vue 网格替代方案,而不是使用 vue 无限加载器
- java - 更新 Map 内 List 内对象的变量
- angular6 - 将 ngx-bootstrap 3.0.1 升级到 4.0.1
- javascript - 计算样式组件的高度
- python - YoloV3 边界框太大
- excel - 我可以像今天是未来的某一天一样测试我的 Excel 公式吗?