我在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());
}
这可以工作,并且图表可以调整大小...但是问题是速度太慢了!因为它将为用户拖动窗口角以调整大小的所有步骤调整大小!
仅在完成调整大小后才如何调整大小?我想使用计时器,但这看起来像是肮脏的骇客!还有更好的主意吗?
答案 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();