Qt的QPaintEvent绘画区域?

时间:2013-03-15 08:55:05

标签: c++ qt

这是对Qt中Painting所做的基本疑问。 我的应用程序的QScrollArea中有centralWidget Main Window。我在QFrame添加了frame scrollareaLayout的{​​{1}}为QFrame。 当我将QGridLayout添加到widgets时,就像这样:

layout

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

  1. 在添加小部件期间设置更新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(); } 是否有用?

  2. 即使我最大化窗口,并不是所有的QLabel都能被我看到。因此,当代码流离开上述功能时,进入事件循环然后是所有QLabel&amp; QFrame的巨大区域画了?或者只有那些可见的QLabel和只有那么多可见的QFrame区域?

1 个答案:

答案 0 :(得分:1)

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

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

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