Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Qt differenze Win e Linux
Forum - C/C++ - Qt differenze Win e Linux

Avatar
Thejuster (Member)
Guru^2


Messaggi: 1935
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 22:14
Giovedì, 13/12/2018
Buona sera.

Una domanda abbastanza banale credo.

Su linux mi appaiono widget che in Windows tramite l'ide di QT non sono disponibili.
Come credo succederà ugualmente per Mac.

Mi domando se scrivendo del codice con questi widget successivamente saranno visibili anche su windows o per gli altri OS.

oltre questo, ci sono delle precauzioni da prendere in merito alla compilazione tra  i diversi sistemi operativi?

Perché testando su linux il mio progetto Mappy, Crasha appena provo a lanciare un nuovo Form.
il debugger mi dice Segmentation Fault.

Ma non vedo dove possa trovarsi questo problema, visto che semplicemente mi apre un dialogo con due spinbox.

quindi vorrei capire se sbaglio io qualcosa, o ci sono operazioni diverse da fare sugli altri os.

Ultima modifica effettuata da Thejuster il 13/12/2018 alle 22:16


PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1600
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 23:05
Giovedì, 13/12/2018
Se su Windows va e su linux no hai sbagliato qualcosa. Segfault = hai sbagliato a usare opengl o hai fatto un accesso a memoria non tua

PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1935
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 10:14
Venerdì, 14/12/2018
Come posso  risolvere?
Hai qualche informazione che puoi essere utile a risolvere questo enigma per me?

Il sorgente e qui
http://www.pierotofy.it/pages/projects/project_675.html

https://cdn.discordapp.com/attachments/278928749246939136/5 ...

https://cdn.discordapp.com/attachments/278928749246939136/5 ...

Ultima modifica effettuata da Thejuster il 14/12/2018 alle 10:23


PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1935
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 23:17
Sabato, 15/12/2018
Dunque ho appreso dove avviene il problema.
Ma non sò perché succede, e come posso risolvere. proprio non ho idea.
E nemmeno google mi è di aiuto.

in pratica ho il crash all'overload dell'operatore.

Classe Tileset.cpp e Tileset.h

Codice sorgente - presumibilmente C#

  1. //Tileset.h
  2.  
  3. QDataStream& operator <<(QDataStream &s, QString& tt);
  4. QDataStream& operator >>(QDataStream &in, QString& tt);
  5.  
  6.  
  7. //Tileset.cpp
  8. QDataStream& operator <<(QDataStream &s,QString& tt)
  9. {
  10.     s << tt;
  11.     return s;
  12. }
  13.  
  14.  
  15. QDataStream& operator >>(QDataStream &in, QString& tt)
  16. {
  17.     in >> tt;
  18.     return in;
  19. }




Se commento queste due funzionim, funziona regolarmente. Ma in seguito non posso serializzare il Tileset che l'utente ha scelto
per quella determinata mappa.

li avviene l'errore del SEGFAULT.

https://cdn.discordapp.com/attachments/227530413063536641/5 ...

Qualche idea? :d


PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1600
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 20:37
Domenica, 16/12/2018
Scusa ma attualmente non ho molto tempo libero, però posso dirti che sto sviluppando un'applicazione con Qt e ho usato diversi widget, ad esempio il calendario, pulsanti, checkbox ecc... e non ho mai riscontrato un problema con le librerie Qt.

Tutto ciò che ho provato funziona sia su windows che su linux e non ho dovuto modificare codice, ho notato solo una differenza: il drover nvidia su Windows è molto permissivo e potevo eliminare l'istanza di OpenGL prima di rimuovere il programma, mentre su linux andava in segfault il programma alla chiusura.

PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1935
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 14:31
Lunedì, 17/12/2018
Hai ragione scusa juster non mi sono espresso bene.
Quello che ho appena scritto e un errore che forse non dipende da win o linux ma non lo so se dipende dal sistema operativo.

Questa funzione di override su win funziona.

Mentre su Linux crasha come indicato nella screen shoot


PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1935
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 11:52
Domenica, 23/12/2018
Risolto grazie lo stesso.

La soluzione è che la serializazzione de QString viene già gestita dal Qt.
quindi non si può fare un ovveridde della stessa.

in precedenza mi hanno detto che la funzione fà una sorta di ping - pong infinito.
per questo crashava boh.

non sono un esperto di c++ come detto, ma da quel che ho capito, e che non bisogna usare un overload per serializzare una QString.

Caricherò gli aggiornamenti su GIT e su pierotofy.

Ultima modifica effettuata da Thejuster il 23/12/2018 alle 11:53


PM Quote