我想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();
}
}
而且它们都工作正常,我不需要单击它们来查看更改的文本。