Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Qt Problema Split
Forum - C/C++ - Qt Problema Split

Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2298
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


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
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(";"));


PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2298
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


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
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(";"));


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 ^^

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2298
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(";"));


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote