删除所有字符串后,如何恢复QStringList?

时间:2018-10-16 16:58:50

标签: c++ qt

我创建了一个按钮,当单击该按钮时,它应该通过串行发送命令列表以完成按钮的操作。我在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是空的。

每次单击按钮后,如何重置字符串列表?

1 个答案:

答案 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);
    }
}