Qt Сбой при двойном нажатии на элемент listWidget

0

В моем проекте у меня есть listWidget. Когда пользователь нажимает на элемент в списке, он загружает это:

void BlockSelect::on_blockList_clicked(const QModelIndex &index)
{
    QString blockListName;
    QString temp_hex;
    QString temp_hex2;
    int temp_int;

    QListWidgetItem *newitem = ui->blockList->currentItem();

    blockListName = newitem->text();
    temp_hex = blockListName.mid(0, blockListName.indexOf(" "));

    if(temp_hex.indexOf(":") == -1)
    {
        temp_int = temp_hex.toInt();
        ui->blockIdIn->setValue(temp_int);
        ui->damageIdIn = 0;
    }
    else
    {
        temp_hex2 = temp_hex.mid(temp_hex.indexOf(":")+1, temp_hex.length()-(temp_hex.indexOf(":")+1));
        temp_hex = temp_hex.mid(0, temp_hex.indexOf(":"));
        temp_int = temp_hex.toInt();
        ui->blockIdIn->setValue(temp_int);
        temp_int = temp_hex2.toInt();
        ui->damageIdIn->setValue(temp_int);
    }
}

В большинстве случаев это просто манипуляции с строкой. (Вам не нужно изучать этот синтаксис или что-то еще)

Моя проблема заключается в том, что когда пользователь быстро нажимает на другой элемент списка (до того, как этот текущий процесс завершен), программа выйдет из строя. Есть ли способ разрешить быстрые клики (сразу несколько процессов) или, может быть, альтернативное решение?

Спасибо за ваше время :)

Теги:
qt
process
crash
qlistwidget

1 ответ

1
Лучший ответ

Я надеюсь, что вы выполните весь этот код в потоке графического интерфейса. Если это так, тогда проблем не будет - если ваш код был правильным (это не так). Нет такого понятия, как "процесс", который вы упомянули в своем вопросе. Клики обрабатываются слотом, и они вызывается из обработчика событий в списке. Это не должно разрушаться, и клики будут обрабатываться сериализованным способом - один за другим.

Вот ошибка: почему вы сбросили значение элемента выделенного элемента UI на ноль?

ui->damageIdIn = 0;

Это нонсенс. Возможно, вы имеете в виду ui->damageIdIn->setValue(0) или ui->damageIdIn->hide(). Затем вы переходите к использованию этого нулевого значения в

ui->damageIdIn->setValue(temp_int);

и он падает.

У вас также могут быть ошибки в других местах вашего кода.

  • 0
    Спасибо :) чувствую себя дураком XD

Ещё вопросы

Сообщество Overcoder
Наверх
Меню