调整大小后的Qt窗口调整大小事件

时间:2019-07-05 23:15:14

标签: c++ qt qtcharts

我在QDialog中有一个QtChart,我使用一个简单的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);

我在自己的对话框中覆盖了QDialog的resizeEvent

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

这可以工作,并且图表可以调整大小...但是问题是速度太慢了!因为它将为用户拖动窗口角以调整大小的所有步骤调整大小!

仅在完成调整大小后才如何调整大小?我想使用计时器,但这看起来像是肮脏的骇客!还有更好的主意吗?

1 个答案:

答案 0 :(得分:1)

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();