Событие изменения размера окна Qt после завершения изменения размера - PullRequest
0 голосов
/ 06 июля 2019

У меня есть QtChart в QDialog, и я использую простой QWidget, чтобы показать его на экране.Мне нужно изменить размер этого Харта всякий раз, когда размер диалогового окна изменяется пользователем.

Вот как я добавляю диаграмму в диалог (в конструкторе):

// Setup chart view to show the chart
mChartView = new QChartView(mChart, ui->widget);
mChartView->setParent(this);
mChartView->resize(ui->widget->size());
mChartView->setRenderHint(QPainter::Antialiasing);

Я переопределил resizeEvent QDialog в моем собственном диалоге:

void CurveDialog::resizeEvent(QResizeEvent *event)
{
    mChartView->resize(ui->widget->size());
}

Это работает, и график изменяется ... но проблема в том, что он ужасно медленный!потому что он будет изменять размер для всех шагов, которые пользователь перетаскивает в угол окна, чтобы изменить его размер!

Как я могу сделать изменение размера только тогда, когда изменение размера сделано?Я хотел использовать таймер, но это выглядит как грязный хак!есть идеи получше?

1 Ответ

1 голос
/ 06 июля 2019

Qt предоставляет систему макетов для управления геометрией дочерних виджетов внутри виджета.В макете будет указан размер и положение каждого дочернего элемента, чтобы гарантировать, что он займет все доступное пространство.

Макет автоматически изменит размер дочерних виджетов при изменении размера родительского элемента:

QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);

QDialog* dialog = new QDialog();
QVBoxLayout* layoutDialog = new QVBoxLayout(dialog);

QWidget* widget = new QWidget();
QVBoxLayout* layoutWidget = new QVBoxLayout(widget);

layoutDialog->addWidget(widget);
layoutWidget->addWidget(chartView);

dialog->exec();
...