QTableWidget verändern

Alles rund um die Programmierung mit Qt
Antworten
Cascoin
Beiträge: 20
Registriert: 28. September 2010 17:32

QTableWidget verändern

Beitrag von Cascoin »

Hallo,

ich habe mir in meinem MainWidget eine QTableWidget erstellt.

Dieses wollte ich jetzt "befüllen".

Wenn ich das im Konstruktor mache geht das ganz gut, z.B. so:

Code: Alles auswählen

QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg( pow(2, 14)));
//Tabelle->setItem(0, 1, newItem);
Jetzt will ich aber über einen Button das Datei-Laden-Dialogfenster öffnen und zwar so:

Code: Alles auswählen

const QString fileName = QFileDialog::getOpenFileName(this,tr("Open Image"), "Bilder/FindIt", tr("Image Files (*.jpg)"));
Der Dateiname wird ja dann in dem String fileName gespeichert.
Und diesen StringName möchte ich jetzt in die Tabelle schreiben.

Aber ich bekomm es nicht hin....
Ich denke ich muss den "const QString" in ein QWidgetItem umwandeln.
Weiß jemand wie das geht???

Ich stell mir das dann so vor das ich auf den Button "Bild laden" drücke, dann wähle ich ein Bild aus, und dann wird das in die Tabelle geschrieben....

Vielen Dank soweit....

mfg cascoin
Cascoin
Beiträge: 20
Registriert: 28. September 2010 17:32

Vielleicht weiss es so jemand

Beitrag von Cascoin »

Hallo,
da mir bis jetzt niemand geantwortet hat nehm ich an das ich meine Frage schlecht gestellt habe und deswegen versuch ichs noch einmal:

Also ich habe ein MainWidget. Der Header dieses MainWidget's sieht so aus:

Code: Alles auswählen

class MainWindow : public QMainWindow
 {
     Q_OBJECT

 public:
     MainWindow();
     QTableWidget *Tab;
     WriteData();
     QString *fileName;

In meinem Konstruktor MainWinow() erzeuge ich mir dynamisch eine Tabelle und weise dieser Tabelle meinen Zeiger *Tabelle zu.
Und zwar so:

Code: Alles auswählen

MainWindow::MainWindow()
{
QTableWidget *Tabelle = new QTableWidget;

this->Tab = Tabelle;

QString *file = new QString;
this->fileName = file; 
}
In der Funktion WriteData() möchte ich Daten in die Tabelle schreiben.
Das Funktioniert allerdings nicht. Das Programm stürtzt ab und ich bekomme keine Fehlermeldung.....

Kurzbeschreibung: Indem der User einen Button drückt öffnet sich ein QFileDialog wo er dann eine Datei laden kann. Diese Datei wird dann in dem QString fileName gespeichert. Nun möchte ich dann dieses QString an eine bestimmte Stelle in meinem QTableWidget schreiben.

Code: Alles auswählen

MainWindow::WriteData
{
this->fileName = QFileDialog::getOpenFileName(this,
     tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)"));


QTableWidgetItem *newItem = new QTableWidgetItem(tr(fileName));
 tableWidget->setItem( 0, 0, newItem);
}
Wo liegt denn da bitte der Fehler??? Ich check es nicht.........
Wandele ich ein QString falsch in ein QTableWidgetItem um?????

Könnte sein das ich einige Klammern, Strichpunkte usw. vergessen habe.
Daran liegt der Fehler aber NICHT.

In meinem Code ist kein Schreibfehler......

Wäre echt super wenn jemand die Antwort hat....

Mfg Cascoin
Mani99
Beiträge: 244
Registriert: 15. April 2009 10:46
Wohnort: München

Beitrag von Mani99 »

Du hast gleich mehrere fehler drinnen!

Z.b. folgendes ist unnötig

Code: Alles auswählen

QString *file = new QString;
besser ist:

Code: Alles auswählen

QString file("");
und das ist auch nicht sonderlich geschickt:

Code: Alles auswählen

QTableWidget *Tabelle = new QTableWidget;

this->Tab = Tabelle; 
du hast doch schon QTableWidget *Tab; angelegt, warum instanzierst du noch einmal ein QTableWidget?

Code: Alles auswählen

MainWindow::WriteData
{
this->fileName = QFileDialog::getOpenFileName(this,
     tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)"));


QTableWidgetItem *newItem = new QTableWidgetItem(tr(fileName));
 tableWidget->setItem( 0, 0, newItem);
} 
besser:

Code: Alles auswählen

void MainWindow::WriteData()
{
   QString fileName = QFileDialog::getOpenFileName(this,
     tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)"));


QTableWidgetItem *newItem = new QTableWidgetItem(tr(fileName));

// Wo nimmst du jetzt tableWidget her?
//tableWidget->setItem( 0, 0, newItem);
} 
Antworten