Code: Alles auswählen
uses local type
Code: Alles auswählen
uses local type
Code: Alles auswählen
#ifndef MAINWINDOW_H_
#define MAINWINDOW_H_
#define GLOBAL
#include <QtGui>
#include "../../build/ui_MainWindow.h"
class CMainWindow : public QMainWindow, private Ui::MainWindow {
Q_OBJECT
public:
CMainWindow();
~CMainWindow();
private:
struct SHardDrive {
QString filesystem;
QString size;
QString used;
QString avail;
QString usedPercent;
QString mountPoint;
};
GLOBAL QList<SHardDrive> disk;
void calculateDiskSpace();
};
#endif /*MAINWINDOW_H_*/
Code: Alles auswählen
#include "MainWindow.h"
#include "../DialogAbout/DialogAbout.h"
#include </usr/include/stdio.h>
#include <QFile>
CMainWindow::CMainWindow() {
setupUi(this);
connect(actionClose, SIGNAL( triggered( bool ) ),
qApp, SLOT( quit() ));
calculateDiskSpace();
}
CMainWindow::~CMainWindow() {}
void CMainWindow::calculateDiskSpace() {
struct SHardDrive hdd;
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 to open file.\n"));
return;
}
QTextStream in(&file);
QString line;
while (!in.atEnd()) {
line = in.readLine();
QStringList list;
list = line.split(QRegExp("\\s+"), QString::SkipEmptyParts);
hdd.filesystem = list[0];
hdd.size = list[1];
hdd.used = list[2];
hdd.avail = list[3];
hdd.usedPercent = list[4];
hdd.mountPoint = list[5];
disk.append(hdd);
}
/** Das wird noch in eine Schleife gepackt */
labelDiskSpace->setText(disk[0].filesystem);
QRegExp rx("%");
QString tmp = disk[0].usedPercent.replace(rx, "");
int x = tmp.toInt();
int y = 16;
QSize newSize(x, y);
frameDrive1->resize(newSize);
frameDrive1->setStyleSheet("background-color: green;");
labelDiskSpace->adjustSize();
}
Code: Alles auswählen
//-- Das hier in den Header
struct SHardDrive {
QString filesystem;
QString size;
QString used;
QString avail;
QString usedPercent;
QString mountPoint;
};
QList<SHardDrive*> daten;
//--
SHardDrive* hdd=NULL;
while (!in.atEnd()) {
line = in.readLine();
QStringList list;
list = line.split(QRegExp("\\s+"), QString::SkipEmptyParts);
hdd = new SHardDrive;
daten.append(hdd);
hdd->filesystem = list[0];
hdd->size = list[1];
hdd->used = list[2];
hdd->avail = list[3];
hdd->usedPercent = list[4];
hdd->mountPoint = list[5];
}
Und wenn ich das Programm normal starte kommt die Meldung 1x von 20 Starts.ASSERT failure in QList<T>::operator[]: "index out of range", file /usr/include/qt4/QtCore/qlist.h, line 392
Wie gehe ich denn da jetzt ran um den Bug zu fixen?mi_cmd_var_create: unable to create variable object
Code: Alles auswählen
QString test;
for (int i = 0; i < disk.size(); i++) {
test.append(disk[i]->filesystem);
test.append("\t");
test.append(disk[i]->size);
test.append("\t");
test.append(disk[i]->used);
test.append("\t");
test.append(disk[i]->avail);
test.append("\t");
test.append(disk[i]->usedPercent);
test.append("\t");
test.append(disk[i]->mountPoint);
test.append("\n");
}
labelDiskSpace->setText(test);
z.B. anstelle des structes:was könnte ich an meinem Code besser machen
Code: Alles auswählen
typedef struct {
...
} SHardDrive;
Code: Alles auswählen
#include </usr/include/stdio.h>
Code: Alles auswählen
list = line.split(QRegExp("\\s+"), QString::SkipEmptyParts);
Q_ASSERT(list.size() >= 6);
...
/** Das wird noch in eine Schleife gepackt */
Q_ASSERT(disk.size() >= 1);
labelDiskSpace->setText(disk[0].filesystem);
"(((((p)(((((window)).disk)).))).shared_null)).array"
Target request failed: mi_cmd_var_create: unable to create variable object.
Ich kann damit nicht wirklich was anfangen, ich denke mal das, dass Problem an"(((((p)(((this))->))).d)).array"
Target request failed: mi_cmd_var_create: unable to create variable object.
Code: Alles auswählen
{ Q_ASSERT_X(i >= 0 && i < p.size(), "QList<T>::operator[]", "index out of range");
Ich weiß nicht was es mit 0x0804f94a auf sich hat, ich habe mal auf dem Stack(?) gesucht, nach der Bezeichnung, jedoch nichts gefunden.4 QList<QString>::operator[]() /usr/include/qt4/QtCore/qlist.h:392 0x0804f94a
Code: Alles auswählen
The popen() function opens a process by creating a pipe, forking, and
invoking the shell.
Ich habe jeden Punkt angeklickt und mir die Variablen angeschaut. nur bei Punkt 4 ist ein Fehler:1 main() /home/osadmin/workspace/config-control/src/main.cpp:6 0x08050ffb
2 CMainWindow() /home/osadmin/workspace/config-control/src/MainWindow/MainWindow.cpp:14 0x0804ee37
3 CMainWindow::calculateDiskSpace() /home/osadmin/workspace/config-control/src/MainWindow/MainWindow.cpp:49 0x0804e5b5
4 QList<QString>::operator[]() /usr/include/qt4/QtCore/qlist.h:392 0x0804f94a
5 qt_assert_x() global/qglobal.cpp:1925 0xb772eb3c
6 qFatal() global/qglobal.cpp:2392 0xb772eae9
7 qt_message_output() global/qglobal.cpp:2160 0xb772ea35
8 abort() 0xb749d891
9 raise() 0xb749bf15
10 __kernel_vsyscall() 0xb7f7f410
Der Eclipse-Debugger ist der ein zigste den ich habe ...array <mi_cmd_var_create: unable to create variable object>
Code: Alles auswählen
3 CMainWindow::calculateDiskSpace() /home/osadmin/workspace/config-control/src/MainWindow/MainWindow.cpp:49 0x0804e5b5 Code: Alles auswählen
while (!in.atEnd()) {
line = in.readLine();
QStringList list;
list = line.split(QRegExp("\\s+"), QString::SkipEmptyParts);
hdd.filesystem = list[0];
hdd.size = list[1];
hdd.used = list[2];
hdd.avail = list[3];
hdd.usedPercent = list[4];
hdd.mountPoint = list[5];
disk.append(hdd);
} Code: Alles auswählen
if(list.size()<6) {
QMessageBox::warning(this,"Error","Ich bin garnicht lang genug !!!\n");
continue;
}