首页 > 解决方案 > 删除所有字符串后如何恢复 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是空的。

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

标签: c++qt

解决方案


使用foreachor 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);
    }
}

推荐阅读