Как сбросить текст на QCustom3DLabel? - PullRequest
2 голосов
/ 08 мая 2020

Далее я пытаюсь изменить текст QCustom3DLabel, но он не меняется. Итак, есть какие-нибудь предложения, как с этим справиться?

MainWidget::MainWidget(QWidget *parent) : QWidget(parent)
{
    resize(800,600);
    auto vLayout = new QVBoxLayout(this);

    auto graph = new Q3DBars;
    vLayout->addWidget(QWidget::createWindowContainer(graph));

    auto camera = graph->scene()->activeCamera();
    camera->setCameraPreset(Q3DCamera::CameraPresetIsometricLeft);

    graph->axes()[0]->setRange(0,5);
    graph->axes()[1]->setRange(0,5);
    graph->axes()[2]->setRange(0,5);

    label = new QCustom3DLabel;
    label->setText("123");
    label->setScaling({5,5,5});
    label->setPosition({1,1,1});
    graph->addCustomItem(label);

    auto timer = new QTimer;
    connect(timer, &QTimer::timeout, this, &MainWidget::setText);
    timer->start(2000);
}

void MainWidget::setText()
{
    qDebug() << "settext";
    label->setText("1234567890");
}

1 Ответ

0 голосов
/ 13 мая 2020

Я воспроизвел код, и проблема была такая же и для изменения других свойств (например, цвет фона тоже не изменился).

в любом случае, здесь я написал не очень чистый код который работает для изменения текста метки:

void MainWidget::setText()
{
   graph->releaseCustomItem(label);
   QCustom3DLabel* newlabel = new QCustom3DLabel(nullptr);
   newlabel->setScaling(label->scaling());
   newlabel->setPosition(label->position());
   newlabel->setText("1234567890");
   label = newlabel;
   graph->addCustomItem(label);
}

Я не знаю почему, но только setText мог изменить значение свойства text, но не имел графического эффекта.

Однако, когда я создал новый экземпляр QCustom3DLabel и вызвал для этого setText, он работал нормально. Мне просто нужно было освободить предыдущий лейбл от графа.

...