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