Da Qstring a string e viceversa
Quando si sviluppa con le Qt si incappa spesso in problemi incompatibilità tra le classi native del C++ e del framework.
Nel caso specifico mi sono trovato a dover fare la conversione da QString a string e viceversa.
Questo perchè ho una classe che svolge determinate operazioni al di fuori del fremwork e che ha una risultato raccolto dalla gui.
Nello specifico la classe è questa:
#include "scan.h"
#include <stdio.h>
#include <stdlib.h>
#include <string>
using std::string;
Scan::Scan()
{
}
string Scan::scanNetwork(string cmd)
{
char *buf = &cmd[0];
FILE *p = popen(buf, "r");
string s;
for (size_t count; (count = fread(buf, 1, sizeof(buf), p));)
{
s += string(buf, buf + count);
}
pclose(p);
return s;
}
La classe prende come input quanto scritto in una QTextEdit e il risultato viene visualizzato in un'altra QTextEdit.
Solo che personalmente nella classe preferisco usare le librerie standard del C++, mentre nella QMainWindow usare le classi Qt.
Vediamo quindi come fare i due passaggi.
Questa riga è esemplificativa:
QString c = Qstring::fromStdString(s.scanNetwork(MyQTextEdit->toPlainText().toStdString()));
ResultQTextEdit->setText(c);
In pratica con fromStdString() diciamo di creare una QString a partire da una string.
La funzione scanNetwork() (vedi sopra) richiede un parametro string e glielo passiamo da ciò che c'è scritto in MyQTextEdit usando toStdString() per trasformare una QString in string.
Subito sotto imposto il contenuto di ResultQTextEdit prendendo il contenuto della QString creata sopra.
In pratica possiamo usare le funzioni fromStdString() e toStdString().
Molto semplice!
c++ qt qstring string qmainwindow qtextedit
Commentami!