Как восстановить QStringList после удаления всех строк? - PullRequest
0 голосов
/ 16 октября 2018

Я создал кнопку, которая при нажатии должна отправить список команд через последовательный порт, чтобы завершить действие кнопки.Мой список строк определен в моем файле 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 голосов
/ 16 октября 2018

Используйте 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...