Oppure

Loading
04/01/12 2:11
Thejuster
Salve ragà.

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




  QString filename = QFileDialog::getOpenFileName(this,tr("Apri File di Classi"),
                                                    tr("/")
                                                    ,tr("File Classi(*.class)"));

    QFile file(filename);

    if(file.open(QFile::ReadOnly | QFile::Text ))
    {
        QTextStream in(&file);
        QString mText = in.readAll();
        QString testo = mText;

        file.flush();   //Pulisco lo stream
        file.close();   //Chiudo il file

        QMessageBox::information(this,tr("Caption"),
                                 testo,
                                 QMessageBox::Ok);

        QStringList lista;
        lista = testo.split(";"); //Errore


    } else {

        QMessageBox::critical(this,tr("Errore"),
                         tr("E Necessario scegliere un file\nPrima di continuare..")
                         ,QMessageBox::Ok);
    }




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

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 04/01/12 9:28
mire.forumfree.it/ - Mire Engine
C# UI Designer
04/01/12 11:19
nihal
Beh, a quanto ricordo il metodo split accetta una QString come parametro, perciò dovresti chiamarlo così:
lista = testo.split(QString(";"));
aaa
04/01/12 11:27
Thejuster
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
mire.forumfree.it/ - Mire Engine
C# UI Designer
04/01/12 13:20
nihal
Uhm, é strano, ho appena testato quel codice e funziona. Una via alternativa potrebbe essere questa:
lista = testo.split(QString.fromStdString(";"));
aaa
04/01/12 14:21
Pitagora
Postato originariamente da nihal:

Beh, a quanto ricordo il metodo split accetta una QString come parametro, perciò dovresti chiamarlo così:
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 ^^
aaa
04/01/12 14:42
Thejuster
Ho trovato la soluzione assieme ad Franciman

la soluzione era questa

lista = testo.split(QString::fromascii(";";));
mire.forumfree.it/ - Mire Engine
C# UI Designer