gpt4 book ai didi

c++ - Qt 中的 QPaintEvent 绘画区域?

转载 作者:行者123 更新时间:2023-11-28 07:43:08 25 4
gpt4 key购买 nike

这是对Qt中完成的Painting的基本疑惑。我在应用程序的 Main Window 中有一个 QScrollArea 作为我的 centralWidget。我已经添加了一个 QFrame framescrollareaQFrameLayoutQGridLayout。当我像这样将 widgets 添加到 layout 时:

MainWindow::AddLabel()
{
setUpdatesEnabled(false);
QGridLayout *myGrid = (QGridLayout *)ui->frame->layout();
for(int i = 0; i < 1000; i++)
{
QLabel *label = new QLabel();
QString str;
str.SetNum(i);
label->SetText(str);
myGrid->AddWidget(label, 0, i, 0);//add label to i'th column of row 0
}
setUpdatesEnabled(true);
repaint();
}

请不要担心内存泄漏,因为这不是问题的重点。所以我的疑问是:

  1. 在将小部件添加到布局期间将更新设置为禁用是否有帮助?

  2. 即使我将窗口最大化,也并非所有 QLabel 对我都是可见的。因此,当代码流离开上述函数并进入事件循环时,所有 QLabel 和 QFrame 的巨大区域都被绘制了吗?或者只有那些可见的 QLabel 和只有那么多可见的 QFrame 区域?

最佳答案

如果您使用的是表单 (.ui),则 ui 中的小部件 不是您的小部件 MainWindow 的子级 。好吧,setUpdatesEnabled() 只影响当前小部件及其子部件,因此对象 ui->frame 仍将在 myGrid->AddWidget< 之后接收更新。改成

  ui->frame->setUpdatesEnabled(false);
...
ui->frame->setUpdatesEnabled(true);

顺便说一句,当您启用更新时,屏幕将被更新。所以你不需要在任何小部件上调用 repaint();

关于c++ - Qt 中的 QPaintEvent 绘画区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15428159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com