Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

QT5 - refresh di un QGraphicsView

Moderatori: Foto UtenteMassimoB, Foto Utentexyz

0
voti

[1] QT5 - refresh di un QGraphicsView

Messaggioda Foto Utentegvee » 15 mag 2018, 14:06

Un saluto a tutti,

Sto scrivendo una applicazione con QT in cui ho bisogno di visualizzare un frame in formato RGB che ricevo da un socket server (l'applicazione in questione è il client).
Sto svolgendo alcune prove, ed a questo scopo uso le classi QGraphicsScene e QGraphicsView.

Tralasciando la parte di ricezione, il codice è di prova ed è racchiuso nel main e lo posso riassumere come segue:

Codice: Seleziona tutto
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QGraphicsScene scene;
    QGraphicsView view(&scene);
   
    int fd;
    char rgbdata[MAX_FRAME_SIZE];
    unsigned int size = 0;

    int nread = 0;

    // set width and height ... not shown
    size = height * width * 3;
       
    while(loop)
    {   
        // part of the code not shown ...
        nread = read(fd, rgbdata, size);
        if(nread == size)
        {
            QImage image((uchar *) rgbdata, width, height, QImage::Format_RGB888);           
            scene.clear();
            QPixmap pixmap = QPixmap::fromImage(image);
            QGraphicsPixmapItem *item = new QGraphicsPixmapItem(pixmap);
            scene.addItem(item);
            scene.update();
            view.show();
            app.exec();
        }
    }

    return 0;
}


Il problema che riscontro è che se non eseguo

Codice: Seleziona tutto
app.exec();


praticamente non riesco a visualizzare il frame, anche se viene mostrata la GUI della classe QGraphicsView. Però se eseguo la funzione exec() della classe QApplication, devo manualmente chiudere la GUI con il mouse, e non è il comportamento desiderato, perché l'intenzione è quella di rifrescare automaticamente il frame.

In più, se non esego tale istruzione le classi QT il programma non può funzionare..
Immagino che debba implementare una GUI vera e propria con il proprio layout e gestione degli eventi, ma non so bene come fare per rifrescare automaticamente, appunto.

PS: ho provato ad implementare la ricezione con QTcpSocket ma non riesco a ricevere nulla. Probabilmente aprirò un thread a riguardo, se necessario.

Qualcuno che ha esperienza con le librerie QT ha qualche consiglio a riguardo ?
Ringrazio in anticipo.
O_/
Avatar utente
Foto Utentegvee
605 2 6
Frequentatore
Frequentatore
 
Messaggi: 215
Iscritto il: 11 feb 2018, 20:34

Torna a Linux

Chi c’è in linea

Visitano il forum: Nessuno e 9 ospiti