c++ - 调整大小完成后的 Qt 窗口调整大小事件

标签 c++ qt qtcharts

我在 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/

相关文章:

cocoa - Qt mac开源库和qt mac cocoa库的区别

c++ - 如何在windows上安装<QtCharts>

qt - QML QtCharts CandlestickSeries 中继器

c++ - 从 cin 获取方向键

c++ - 如何使用 C++ 增加 Visual Studio 内部版本号?

c++ - 二叉树中 shared_ptr 的 "double free or corruption"

c++ - 如何解决对自己的C++成员函数的 undefined reference ?

c++ - "CREATE TABLE IF NOT EXISTS"语句在 qt sqlite 中不起作用

c++ - QDateTimeAxis (QtCharts) 中的错误值

c++ - 为什么建议包含googletest源文件