我创建了一个按钮,当单击该按钮时,它应该通过串行发送命令列表以完成按钮的操作。我在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
是空的。
每次单击按钮后,如何重置字符串列表?
答案 0 :(得分:3)
使用foreach
或范围内的for
而不是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);
}
}