Я создаю приложение в Qt, которое позволяет пользователям перетаскивать различные "модули" в QGraphicsView. Всякий раз, когда один из этих модулей выбран, он выдает сигнал, который затем выбирается "ConfigurationWidget", который является боковой панелью, которая должна отображать все соответствующие параметры выбранного модуля:
class ConfigurationWidget : public QWidget
{
Q_OBJECT
public:
ConfigurationWidget(QWidget *parent) : QWidget(parent) {}
public slots:
void moduleSelected(Module* m)
{
if(layout())
{
while (itsLayout->count()>0)
{
delete itsLayout->takeAt(0);
}
}
delete layout();
itsLayout = new QFormLayout(this);
itsLayout->addRow(QString(tr("Type:")), new QLabel(m->name()));
itsLayout->addRow(QString(tr("Instance:")), new QLabel(m->instanceID()));
// ... Display a whole bunch of other fields that depends on the module
}
};
Проблема заключается в том, что ConfigurationWidget никогда не очищается при выборе модуля. Новые поля просто нарисованы поверх старых. Я пробовал различные комбинации hide() и show(), invalidate(), update() и т.д. Безрезультатно.
Какой правильный способ сделать виджет, который может менять свои поля, как это на лету?