我在 QDialog 中有一个 QtChart,我使用一个简单的 QWidget 将它显示在屏幕上。每当用户调整对话框窗口大小时,我都需要调整此 hart 的大小。
这就是我将图表添加到对话框的方式(在构造函数中):
// 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());
}
这行得通,并且图表的大小得到了调整...但问题是它非常慢!因为它会根据用户拖动窗口角来调整大小的所有步骤调整大小!
如何只在调整大小完成后才调整大小?我想使用计时器,但这看起来像是一个肮脏的黑客!有更好的想法吗?
最佳答案
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();
关于c++ - 调整大小完成后的 Qt 窗口调整大小事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56910061/