1

我想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不断改变它的价值。

问题是,似乎虽然修改了文本,但只有当我与窗口交互时,它才会在屏幕上更新。

有什么方法可以直接更新它而无需交互?例如,如果我对 Label 执行相同操作,则它可以正常工作,并且 Label 会不断更改其文本,而无需与之交互。

我正在使用 ROS 的 rqt 库来开发使用 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 library的错误。

顺便说一句,我正在修改这样的标签:

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();
  }
}

而且它们都工作正常,我不需要单击它们来查看更改的文本。

4

0 回答 0