更新/修改QListWidgetItem

时间:2018-04-10 08:20:22

标签: c++ qt qlistwidget qlistwidgetitem

我想使用public function behaviors() { return [ [ 'class' => TimestampBehavior::className(), 'createdAtAttribute' => 'create_time', 'updatedAtAttribute' => 'update_time', //'value' => new Expression('NOW()'), ], ]; } 创建一个列表,我可以自动添加和删除项目,而无需用户与图形界面交互。我完成了这项工作,但在创建项目时,我无法更新/修改项目中的文本。我创建了四个这样的项目:

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)); 不断改变其价值的地方。

问题在于,虽然文本已被修改,但只有在我与窗口交互时才会在屏幕上更新。

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

我正在使用ROS的rqt库,开发一个用Qt创建的插件。虽然我相信我的问题与Qt直接相关而不是ROS。

谢谢。

EDIT1:我添加了updateitem,但不适合我。

ui_.list_movil->update()

我只添加了四个项目,之后我尝试修改它们。它对我不起作用,因为我必须单击一个项目才能看到更改的文本。如果我做得对,也许它应该是rqt library的错误。

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

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

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

0 个答案:

没有答案