簡體   English   中英

QGraphicsView並不總是更新

[英]QGraphicsView doesn't always update

嗨,我有一個GridLayout上面有64個GraphicsViews(我知道很多,但這是我現在可以想到的唯一方法)。 現在,我目前僅在計時器刻度上的每個圖形視圖上繪制一條隨機線。 這有效,但僅適用於8種圖形,創建圖形視圖
void Simulation :: createGraphicsViews(){for(int i = 0; i <64; i ++){for(int j = 0; j <8; j ++){

        graphicsScene[i] = new QGraphicsScene();
        graphicsView[i] = new QGraphicsView(graphicsScene[i]);
        simui->gridLayout->addWidget(graphicsView[i], i/8, j);
        }

    }
}

每個圖形視圖中的隨機線

for(int x = 0; x < 64; x++){
    x1 = qrand()%(50+1) - 1;
    y1 = qrand()%(50+1)-1;
    x2 = qrand()%(50+1)-1;
    y2 = qrand()%(50+1)-1;
    graphicsScene[x]->addLine(x1,y1,x2,y2);
    qDebug() << "adding line to" << x << "at" << x1 <<","<<y1<<","<<x2<<","<<y2;
}

顯示更新的圖形視圖

 for(int x = 0; x < 64; x++){
        graphicsView[x]->show();
        qDebug()<<"showing" << x;
  }

我在過去2個小時中仔細研究了一下,嘗試了多種方法,但都沒有解決此問題,我認為這可能是愚蠢的,但我無法弄清楚

任何幫助,不勝感激謝謝

另外,如果我嘗試更新除有效視圖之外的任何圖形視圖,它們仍然不會更新。

https://gist.github.com/gazza126/f43d5b0377649782a35d-完整代碼(可做任何事情)

下面的作品。 確保在.pro文件中啟用C ++ 11:將CONFIG += c++11到項目文件中。

#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsLineItem>
#include <QGridLayout>
#include <QTime>
#include <QTimer>
#include <array>

class View : public QGraphicsView
{
public:
   View(QWidget *parent = 0) : QGraphicsView(parent) {
      setRenderHint(QPainter::Antialiasing);
   }
   void resizeEvent(QResizeEvent *) {
      fitInView(-1, -1, 2, 2, Qt::KeepAspectRatio);
   }
};

template <typename Container>
void updateScenes(Container & views)
{
   auto angle = 360.0/1000.0 * (QTime::currentTime().msecsSinceStartOfDay() % 1000);
   for (auto & view : views) {
      auto scene = view.scene();
      scene->clear();
      auto * line = scene->addLine(-1, 0, 1, 0, QPen(Qt::darkBlue, 0.1));
      line->setRotation(angle);
   }
}

int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   QGraphicsScene s;
   QTimer timer;
   QWidget window;
   QGridLayout layout(&window);
   std::array<View, 64> views;

   int i = 0;
   for (auto & view : views) {
      view.setScene(new QGraphicsScene(&view));
      layout.addWidget(&view, i/8, i%8);
      ++ i;
   }

   QObject::connect(&timer, &QTimer::timeout, [&views]{ updateScenes(views); });
   timer.start(50);
   window.show();
   return a.exec();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM