Qt中的paint()vs paintEvent()

时间:2015-05-25 05:54:54

标签: qt paint qgraphicsitem paintevent

我有两个问题。

  1. paint() QGraphicsItempaintEvent()QWidget API之间有什么区别?

  2. 我正在开发一个计时器类GUI,所以我每隔100毫秒用嵌入式linux板上的paint() API更新屏幕。它几乎消耗了所有的CPU。知道如何防止这种情况吗?

  3. 或者还有其他方法可以做这个简单的图形吗?

    1. 此外,我在网格布局中有多个QGraphicsScene,每个QGraphicsView都有自己的/****SCENE 1*****/ scene_1 = new QGraphicsScene(); scene_1->setBackgroundBrush(Qt::black); ui->gv_1->setScene(scene_1); ui->gv_1->setRenderHint(QPainter::Antialiasing); circle = scene_1->addEllipse(50, 80, 150, 150, outlinePen, darkGreyBrush); textSlotNo = scene_1->addText("1", QFont("Arial", 30) ); textSlotNo->setDefaultTextColor(Qt::gray); textSlotNo->setPos(0,50); MyItem *item_1 = new MyItem(1); scene_1->addItem(item_1); item_1->timer = new QTimer(); connect(item_1->timer, SIGNAL(timeout()),scene_1, SLOT(update())); item_1->timer->start(100); /****SCENE 2*****/ ...... 。如何从MainWindow更新单个视图。
    2. 以下是我目前如何执行此操作的代码:

      typedef long long T;
      
      class SomeClass
      {
          T var;
          //...
      };
      
      typedef int A;
      typedef T B;
      

      硬件:TI-AM3354

1 个答案:

答案 0 :(得分:2)

  1. $query = "SELECT * FROM members WHERE first_name LIKE '%$searchTerm%' OR last_name LIKE '%$searchTerm%' OR date LIKE '%$searchTerm%'"; $results = mysqli_query ($db_connect, $query) or die (mysqli_error (db_connect)); if (mysqli_num_rows ($results) >= 1) { $record = ""; while ($row = mysqli_fetch_array ($results)) { include "result.php"; } echo $record . "<hr />$search_form</main>"; } else { echo "<h1>0 Matching Records</h1><hr />$search_form"; }; 是一个通用事件处理程序,由Qt调用绘制一个小部件,通常是整个小部件,但有时可以通过尊重QPaintEvent的region和rect属性来优化。
  2. 在绘制QGraphicsScene时,QGraphicsView会在单个QGraphicsItems上调用
  3. paintEvent()。它通常不会被调用所有项目,QGraphicsView在绘制项目之前会进行各种检查,例如:确保该项目在视口中而不被其他项目隐藏,等等。
  4. 根据您发布的代码,我看到两个优化:首先,不要为每个项目单独运行QTimer,而是为整个场景运行一个计时器。现在,您的代码每100毫秒触发N次重新绘制,而不是单个重绘。此外,更新商品的属性,让他们自己调用QGraphicsItem::update() ,如果属性实际更改,而不是无条件地更新整个场景。