Обновить / изменить QListWidgetItem

Я хотел бы использовать QWidgetList создать список, в котором я могу добавлять и удалять элементы автоматически, без необходимости взаимодействия пользователя с графическим интерфейсом. Я сделал это, но не могу обновить / изменить текст, который я вставил в элемент при его создании. Я создал четыре элемента, как это:

for (int i = 0; i < 4; i++)
{
QListWidgetItem *lwi = new QListWidgetItem();
lwi->setSizeHint(QSize(200, 20));
lwi->setTextAlignment(Qt::AlignCenter);
lwi->setText(QString("Obstacle ") + QString::number(i));
ui_.list->addItem(lwi);
}

И я видел, что я могу изменить текст следующим образом:

ui_.list->item(0)->setText(QString::number(updateItem, 'f', 2));

куда updateitem постоянно меняет свою стоимость.

Проблема в том, что кажется, что хотя текст изменен, но он обновляется на экране, только когда я взаимодействую с окном.

Есть ли способ обновить его напрямую без взаимодействия? Например, если я делаю то же самое с меткой, она работает правильно, и метка постоянно меняет свой текст без необходимости с ним взаимодействовать.

Я работаю с библиотекой rqt для ROS, чтобы разработать плагин, созданный с помощью Qt. Хотя я считаю, что моя проблема напрямую связана с Qt, а не с ROS.

Спасибо.

EDIT1: я добавил ui_.list_movil->update() но не работает для меня.

void MyPlugin::update_list()
{
if (flagFirstItem == false)
{
for (int i = 0; i < 4; i++)
{
QListWidgetItem *lwi = new QListWidgetItem();
lwi->setSizeHint(QSize(200, 20));
lwi->setTextAlignment(Qt::AlignCenter);
lwi->setText(QString("Obstacle ") + QString::number(i));
ui_.list_movil->addItem(lwi);
}
flagFirstItem = true;
}
if (flagFirstItem == true)
{
for (int i = 0; i < ui_.list_movil->count(); ++i)
{
ui_.list_movil->item(i)->setText(QString::number(updateItem, 'f', 2));
ui_.list_movil->update();
}
}
}

Я добавляю четыре элемента только один раз, и после этого я пытаюсь изменить их. Это не работает нормально для меня, потому что я должен нажать на элемент, чтобы увидеть измененный текст. Если я делаю это правильно, возможно, это должно быть ошибка с библиотека rqt.

Кстати, я модифицирую ярлыки так:

void MyPlugin::imuEuler_callback(const sensor_msgs::Imu msg)
{
if ((ros::Time::now().toSec() - updateTimeImuEuler) >= updateTime)
{
ui_.label_rollValue->setText(QString::number(msg.orientation.x, 'f', 2));
ui_.label_pitchValue->setText(QString::number(msg.orientation.y, 'f', 2));
ui_.label_yawValue->setText(QString::number(msg.orientation.z, 'f', 2));
updateTimeImuEuler = ros::Time::now().toSec();
}
}

И все они работают нормально, мне не нужно нажимать на них, чтобы увидеть измененный текст.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]