Причина
QGraphicsRectItem , который вы используете в качестве дескриптора, не знает об изменениях размера QDial , поэтому он не отвечает, изменяя размер самого себя.
Ограничение
QWidget и его подклассы не предоставляют что-то вроде sizeChanged
сигнала из коробки.
Решение
Принимая во внимание причину и данное ограничение, мое решение будет следующим:
- В подкалсе QDial , скажем Dial , добавьте новыйсигнал
void sizeChanged();
- Переопределить
resizeEvent
из Наберите , например:
в dial.cpp
void Dial::resizeEvent(QResizeEvent *event)
{
QDial::resizeEvent(event);
sizeChanged();
}
Измените
auto *dial= new QDial();
на
auto *dial= new Dial();
Добавьте следующий код после
Scene->addItem(handle); // adding to scene
:
в том месте, где ваш пример кода:
connect(dial, &Dial::sizeChanged, [dial, handle](){
handle->setRect(dial->geometry().adjusted(-10, -10, 10, 10));
});
Примечание: Эту проблему также можно решить, используя eventFilter вместо подкласса QDial .Однако из вашего другого вопроса я знаю, что вы уже подкласс QDial , поэтому я считаю предложенное решение более подходящим для вас.
Результат
Это результат предложенного решения: