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 Problema Split
Forum - C/C++ - Qt Problema Split

Avatar
Thejuster (Member)
Guru^2


Messaggi: 1704
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 3:11
Mercoledì, 04/01/2012
Salve ragà.

Ho Questo problema e non riesco a capire il motivo per cui non riesca a splittare una semplice stringa


Codice sorgente - presumibilmente C/C++

  1. QString filename = QFileDialog::getOpenFileName(this,tr("Apri File di Classi"),
  2.                                                     tr("/")
  3.                                                     ,tr("File Classi(*.class)"));
  4.  
  5.     QFile file(filename);
  6.  
  7.     if(file.open(QFile::ReadOnly | QFile::Text ))
  8.     {
  9.         QTextStream in(&file);
  10.         QString mText = in.readAll();
  11.         QString testo = mText;
  12.  
  13.         file.flush();   //Pulisco lo stream
  14.         file.close();   //Chiudo il file
  15.  
  16.         QMessageBox::information(this,tr("Caption"),
  17.                                  testo,
  18.                                  QMessageBox::Ok);
  19.  
  20.         QStringList lista;
  21.         lista = testo.split(";"); //Errore
  22.  
  23.  
  24.     } else {
  25.  
  26.         QMessageBox::critical(this,tr("Errore"),
  27.                          tr("E Necessario scegliere un file\nPrima di continuare..")
  28.                          ,QMessageBox::Ok);
  29.     }




L'errore dell'ide è il seguente

gestioneclassi.cpp:47: error: C2664: 'QStringList QString::split(const QString &,QString::SplitBehavior,Qt::CaseSensitivity) const': impossibile convertire il parametro 1 da 'const char [2]' a 'const QString &'
Motivo: impossibile convertire da 'const char [2]' a 'const QString'
Nessun costruttore ha potuto accettare il tipo di origine o la risoluzione dell'overload del costruttore Š risultata ambigua

Consigli? :-|

Ho provato anche a leggere la documentazione
e propone questo esempio

Testo quotato


Splits the string into substrings wherever sep occurs, and returns the list of those strings. If sep does not match anywhere in the string, split() returns a single-element list containing this string.

cs specifies whether sep should be matched case sensitively or case insensitively.

If behavior is QString::SkipEmptyParts, empty entries don't appear in the result. By default, empty entries are kept.

Example:

QString str = "a,,b,c";

QStringList list1 = str.split(",");
// list1: [ "a", "", "b", "c" ]

QStringList list2 = str.split(",", QString::SkipEmptyParts);
// list2: [ "a", "b", "c" ]





Risultato?
Stesso errore da che dipende?

Ultima modifica effettuata da Thejuster il 04/01/2012 alle 10:28


PM Quote
Avatar
nihal (Ex-Member)
Pro


Messaggi: 109
Iscritto: 12/04/2010

Segnala al moderatore
Postato alle 12:19
Mercoledì, 04/01/2012
Beh, a quanto ricordo il metodo split accetta una QString come parametro, perciò dovresti chiamarlo così:
Codice sorgente - presumibilmente Plain Text

  1. lista = testo.split(QString(";"));



Chi lotta può perdere. Chi non lotta ha già perso...
PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1704
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 12:27
Mercoledì, 04/01/2012
non va purtroppo

l'errore

gestioneclassi.cpp:50: error: C2440: '<function-style-cast>': impossibile convertire da 'const char [2]' a 'QString'
Nessun costruttore ha potuto accettare il tipo di origine o la risoluzione dell'overload del costruttore Š risultata ambigua


PM Quote
Avatar
nihal (Ex-Member)
Pro


Messaggi: 109
Iscritto: 12/04/2010

Segnala al moderatore
Postato alle 14:20
Mercoledì, 04/01/2012
Uhm, é strano, ho appena testato quel codice e funziona. Una via alternativa potrebbe essere questa:
Codice sorgente - presumibilmente Plain Text

  1. lista = testo.split(QString.fromStdString(";"));



Chi lotta può perdere. Chi non lotta ha già perso...
PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 15:21
Mercoledì, 04/01/2012
Testo quotato

Postato originariamente da nihal:

Beh, a quanto ricordo il metodo split accetta una QString come parametro, perciò dovresti chiamarlo così:
Codice sorgente - presumibilmente Plain Text

  1. lista = testo.split(QString(";"));



No, in quanto la classe QString ha un costruttore di conversione di tipo const char *.

P.S. a me, il tuo source, funziona ^^


Yep, I came back :P
PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1704
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 15:42
Mercoledì, 04/01/2012
Ho trovato la soluzione assieme ad Franciman

la soluzione era questa

lista = testo.split(QString::fromascii(";"));


PM Quote