Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Polish
  4. Zarządzanie UI w MainWindow z poziomu klasy zewnętrznej

Zarządzanie UI w MainWindow z poziomu klasy zewnętrznej

Scheduled Pinned Locked Moved Unsolved Polish
2 Posts 2 Posters 1.8k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D Offline
    D Offline
    Dawid
    wrote on last edited by Dawid
    #1

    Witam,

    chcę przerobić swój kod.

    Poprzedni działał tak, że wszystkie metody zmieniające były w Main Window.

    Teraz chcę aby różne klasy były odpowiedzialne za zarządzanie osobnym elementem UI. Koniec końców, chciałbym aby 1 z klas po nacisnieciu przycisku aktualizowała wyswietlony obrazek dopóki przestanie iterować w jednej z metod wewnętrznych.

    Gdy wszystko było napisane w main window korzystałem z :

    QImage symulacja = QImage(sizeX,sizeY,QImage::Format_RGB32);
    QGraphicsPixmapItem * ptrToImage;
    graphic = new QGraphicsScene(this);
    <pętla> symulacja.setPixel(m,o,qRgb(0,0,0)); <>
    ptrToImage = graphic->addPixmap(QPixmap::fromImage(symulacja));
    ui->graphic->setScene(graphic);
    

    teraz rodzi mi to sporo problemów gdy rozbiłem to na kilka klas - kontrolerów.

    Teraz to wygląda tak:

    w main window mam metodę:
    void MainWindow::activeSimulation(){

    this->simulation = QImage(0,0,QImage::Format_RGB32);
     this->graphic = new QGraphicsScene(this);
    
    
    
     this->ptrToImage = this->graphic->addPixmap(QPixmap::fromImage(this->simulation));
     ui->graphicsView->setScene(graphic);
    
    
     simulationGrid.simulationptr = this->simulationptr;
     simulationGrid.ptrToImage = this->ptrToImage;
     simulationGrid.graphic = this->graphic;
    

    }

    w klasie mam:

    void SimulationGrid::CreateGrid(){

    simulation = QImage(this->xSize,this->ySize,QImage::Format_RGB32);
    
    
    
    this->vector2D_Of_Tiles.resize(this->xSize,std::vector<StructureTile>(this->ySize,StructureTile()));
    for (uint i = 0; i<vector2D_Of_Tiles.size();i++ ){
        for (uint j = 0; j<vector2D_Of_Tiles[i].size(); j++){
    
            vector2D_Of_Tiles[i][j].setPosition(i,j);
            simulation.setPixel(i,j,qRgb(0,0,0));
    
        }
    
    
    }
    
    *simulationptr=simulation;
    ptrToImage->setPixmap(QPixmap::fromImage(*simulationptr));
    
    
    qDebug() << "Grid Created";
    

    Chciałbym żeby wszystko odbywało się po stronie klasy (oczywiście może dostać jakiś wskaźnik czy coś). Pytanie teraz jak to ugryźć i jak przenieść zarządzanie graphicsView od MainWindow do własnej klasy.

    1 Reply Last reply
    0
    • sierdzioS Offline
      sierdzioS Offline
      sierdzio
      Moderators
      wrote on last edited by
      #2

      Możesz stworzyć własny QWidget, dajmy na to SimulationWidget, który będzie miał w sobie QGraphicsView. Następnie ten widget dodać do swojego głównego UI. Wtedy masz w swojej klasie pełną kontrolę nad QGraphicsView, a twój main window pozostaje "czysty".

      Jeśli symulacja musi też przekazywać jakieś info do innych klas podpiętych do MainWindow, możesz dodać sygnał i podpiąć do slotów w tych innych klasach.

      (Z(:^

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved