[sloved]QString Zerlegen und im Array Speichern
Verfasst: 29. Januar 2008 12:54
Hallo Gemeinde, ich bin neu im Forum und grüße hiermit erst einmal alle.
So dann mal zu meinem Vorhaben und meinem Problemen dir mir seit ein paar Tagen den Nerv rauben
Aufgabe:
Ich möchte den Genutzt und Freien Speicherplatz der Partitionen auslesen, Ich habe mich dafür entschieden df -h zu parsen, ohne txt Datei. Das ganze wird in einem QString gespeichert, der dann in einem QLabel ausgegeben wird. Nun soll das ganze auch etwas schick aussehen, also Grafisch dargestellt werden.
Beispiel:
/dev/sda2 15G 3.9G 9.9G 29% /
tmpfs 506M 4.0K 506M 1% /dev/shm
/dev/sda4 20G 15G 4.2G 78% /home
/dev/sda1 20G 20G 462M 98% /media/disk0
/dev/sdb1 75G 29G 47G 39% /media/disk
/dev/sdc1 150G 37G 113G 25% /media/WD Passport
Das wird im QString gespeichert.
Problem1:
Ich brauche ein 2-Dimensionales Array, weiß aber nicht so rech wo ich da ansetzen muss mit QChar oder QByteArray...
Das Array soll folgenden Aufbau haben:
Array[x][y]
x steht für die Partition.
y steht für werte der Partition
Beispiel:
Array[0][0] = partition(dev/sda2), mountpoint(/)
Array[0][1] = partition(dev/sda2), fullSize(15GB)
Array[0][2] = partition(dev/sda2), usedSpace(3,9GB)
Array[0][3] = partition(dev/sda2), FreeSpace(9,9GB)
Array[0][4] = partition(dev/sda2), used in % (29%)
Array[1][0] = partition(dev/sda4), mountpoint(/home)
Array[1][1] = partition(dev/sda4), fullSize(20GB)
Array[1][2] = partition(dev/sda4), usedSpace(15GB)
Array[1][3] = partition(dev/sda4), FreeSpace(4,2GB)
Array[1][4] = partition(dev/sda4), used in % (78%)
etc.
Sprich ich muss meinen QString vollkommen Zerlegen, nur wie?
Problem2:
Wenn ich das erst einmal in einem Array habe, würde ich das gerne grafisch darstellen in Form eines Balken (Farbig) um die Auslastung zu Zeigen. Ich habe mir gedacht das ganze mit einem QFrame zu gestalten, und den dann je nach den belegten Prozenten eine Farbe geben:
Beispiel:
QFrame1 hat eine breite von 100px (Grund Frame)
QFrame2 hat eine breite von 50px (Auslastung) mit der Hintergrundfarbe grün, sprich man sieht visuell wie es mit der Partition steht
Wobei sich QFrame2 innerhalb QFrame1 befindet, oder gibt es da eine bessere Vorgehensweise?
So das wäre mein Anliegen, anbei poste ich auch meinen Code, damit mein vorhaben etwas besser nach zu voll ziehen ist.
Ich hoffe mir kann jemand ein paar Tipps geben, wie an die Geschichte ran gehen sollte.
so long
jd
So dann mal zu meinem Vorhaben und meinem Problemen dir mir seit ein paar Tagen den Nerv rauben
Aufgabe:
Ich möchte den Genutzt und Freien Speicherplatz der Partitionen auslesen, Ich habe mich dafür entschieden df -h zu parsen, ohne txt Datei. Das ganze wird in einem QString gespeichert, der dann in einem QLabel ausgegeben wird. Nun soll das ganze auch etwas schick aussehen, also Grafisch dargestellt werden.
Beispiel:
/dev/sda2 15G 3.9G 9.9G 29% /
tmpfs 506M 4.0K 506M 1% /dev/shm
/dev/sda4 20G 15G 4.2G 78% /home
/dev/sda1 20G 20G 462M 98% /media/disk0
/dev/sdb1 75G 29G 47G 39% /media/disk
/dev/sdc1 150G 37G 113G 25% /media/WD Passport
Das wird im QString gespeichert.
Problem1:
Ich brauche ein 2-Dimensionales Array, weiß aber nicht so rech wo ich da ansetzen muss mit QChar oder QByteArray...
Das Array soll folgenden Aufbau haben:
Array[x][y]
x steht für die Partition.
y steht für werte der Partition
Beispiel:
Array[0][0] = partition(dev/sda2), mountpoint(/)
Array[0][1] = partition(dev/sda2), fullSize(15GB)
Array[0][2] = partition(dev/sda2), usedSpace(3,9GB)
Array[0][3] = partition(dev/sda2), FreeSpace(9,9GB)
Array[0][4] = partition(dev/sda2), used in % (29%)
Array[1][0] = partition(dev/sda4), mountpoint(/home)
Array[1][1] = partition(dev/sda4), fullSize(20GB)
Array[1][2] = partition(dev/sda4), usedSpace(15GB)
Array[1][3] = partition(dev/sda4), FreeSpace(4,2GB)
Array[1][4] = partition(dev/sda4), used in % (78%)
etc.
Sprich ich muss meinen QString vollkommen Zerlegen, nur wie?
Problem2:
Wenn ich das erst einmal in einem Array habe, würde ich das gerne grafisch darstellen in Form eines Balken (Farbig) um die Auslastung zu Zeigen. Ich habe mir gedacht das ganze mit einem QFrame zu gestalten, und den dann je nach den belegten Prozenten eine Farbe geben:
Beispiel:
QFrame1 hat eine breite von 100px (Grund Frame)
QFrame2 hat eine breite von 50px (Auslastung) mit der Hintergrundfarbe grün, sprich man sieht visuell wie es mit der Partition steht
Wobei sich QFrame2 innerhalb QFrame1 befindet, oder gibt es da eine bessere Vorgehensweise?
So das wäre mein Anliegen, anbei poste ich auch meinen Code, damit mein vorhaben etwas besser nach zu voll ziehen ist.
Code: Alles auswählen
void CMainWindow::calculateDiskSpace() {
QString cmd("df -h | grep /dev/");
FILE *infile = popen( QFile::encodeName(cmd).data(), "r" );
if (infile == NULL) {
QMessageBox::warning(0, tr("Error"), tr("Failed to parse command.\n"));
return;
}
QFile file;
if (!file.open(infile, QIODevice::ReadOnly)) {
QMessageBox::warning(0, tr("Error"), tr("Failed open file.\n"));
return;
}
QTextStream in(&file);
QString line = in.readLine();
while (!in.atEnd()) {
line.append("\n");
line.append(in.readLine());
}
labelDiskSpace->setText(line);
labelDiskSpace->adjustSize();
}
so long
jd