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



  • 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.


  • Moderators

    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.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.