ich habe 2 kleine Problemchen mit Qt. Die Suchfunktion habe ich schon bemüht. Auch die Dokumentation sind wir schon zu dritt durch. Für ein Projekt soll ein Programm mit einer GUI geschrieben werden. Die GUI ist Qt, der Rest vom Programm ist in Old-School C geschrieben. Ich habe den Part bekommen die GUI zu programmieren, die bis auf eben diese 2 Probleme gut funktioniert.
Ich habe ein QListWidget in den QStrings reingeschrieben werden. Sobald ein Element aus der Liste angeklickt wird, brauche ich den QString des Eintrages wieder zurück für weitere Bearbeitungen. Das ist Problem Nummer 1.
Problem Nummer 2 ist folgendes, ich habe ein Signal auf mein QListWidget mit itemClicked. Doch dieses Event wird nie ausgeführt. Ich habe auch schon ein QListWidget übergeben. Hilft nichts. Das QListWidget bleibt tot.
Kompilieren und die anderen Funktionen kein Problem. nur daran beiße ich mir die Zähne aus. Schonmal merci im vorraus. Anbei ist noch ne kleine Ecke Code:
Code: Alles auswählen
#include "dvdcollector.h"
dvdcollector::dvdcollector(QMainWindow *parent) : QMainWindow(parent) {
setupUi(this);
isEditActive = false;
isCollectionGeoeffnet = false;
isGeaendert = false;
filmliste -> insertItem(1, "Honk");
QListWidgetItem item;
/*Film aktuellerfilm = NULL*/
felderSperren(true);
/*Verbindet die Elemente des QT Designer mit Code*/
connect (pushFilmBearbeiten, SIGNAL (clicked()), this, SLOT (bearbeiten()));
connect (pushFilmAnlegen, SIGNAL (clicked()), this, SLOT (anlegen()));
connect (pushFilmLoeschen, SIGNAL (clicked()), this, SLOT (loeschen()));
connect (pushcollectionOeffnen, SIGNAL (clicked()), this, SLOT (dateiOeffnen()));
connect (pushCollectionSpeichern, SIGNAL (clicked()), this, SLOT (dateiSpeichern()));
connect (pushZufallsfilm, SIGNAL (clicked()), this, SLOT (zufallsFilm()));
connect (ButtonBildPfad, SIGNAL (clicked()), this, SLOT (bildpfad()));
connect (buttonVerwerfen, SIGNAL (clicked()), this, SLOT (verwerfen()));
connect (buttonSpeichern, SIGNAL (clicked()), this, SLOT (filmSpeichern()));
connect (ButtonSuchen, SIGNAL (clicked()), this, SLOT (filmSuche()));
connect (filmliste, SIGNAL (itemClicked(*item)), this, SLOT (zeigeFilm()));
};
dvdcollector::~dvdcollector()
{
if (close())
{
QMessageBox::StandardButton ret;
ret = QMessageBox::warning(this, tr("1337-DVD-Collector"),
tr("Möchten Sie vor dem Beenden des 1337-DVD-Collectors noch speichern?"),
QMessageBox::Save | QMessageBox::Cancel );
if (ret == QMessageBox::Save)
{
speichern();
}
else
{
close();
}
}
}
/*Funktionsname anlegen() */
/*Funktionsbeschreibung SLOT zum Button Anlegen */
void dvdcollector::anlegen()
{
if (isCollectionGeoeffnet)
{
/*Aktivieren der Buttons: Speichern, Verwerfen, Bildpfad*/
isEditActive = true;
/*Aufhebung der Sperrung der LineEdit's*/
felderSperren(false);
/*Leeren der Felder*/
name -> setText("");
genre -> setText("");
jahr -> setText("");
regisseur -> setText("");
studio -> setText("");
laenge -> setText("");
darsteller -> setText("");
usk -> setText("");
}
}
/*Funktionsname bearbeiten() */
/*Funktionsbeschreibung SLOT zum Button bearbeiten */
void dvdcollector::bearbeiten()
{
if (isCollectionGeoeffnet)
{
/*Aktivieren der Buttons: Speichern, Verwerfen, Bildpfad*/
isEditActive = true;
/*Aufhebung der Sperrung der LindeEdit's*/
felderSperren(false);
/*wird evtl. entfernt*/
/*name -> setText("aktuellerfilm->name");*/
/*genre -> setText ("aktuellerfilm->genre");*/
/*jahr -> setText("aktuellerfilm->jahr");*/
/*regisseur -> setText("aktuellerfilm->regisseur");*/
/*studio -> setText("aktuellerfilm->studio");*/
/*laenge -> setText("aktuellerfilm->laenge");*/
/*darsteller -> setText(""aktuellerfilm->darsteller);*/
/*usk -> setText("aktuellerfilm->usk");*/
}
}
/*Funktionsname loeschen() */
/*Funktionsbeschreibung SLOT zum Button löschen */
void dvdcollector::loeschen()
{
if (isCollectionGeoeffnet)
{
/*aufrufen der Funktion zum löschen des Films aus der Liste */
/*film_loeschen(aktuellerfilm->name);*/
}
}
/*Funktionsname dateiOeffnen */
/*Funktionsbeschreibung SLOT zum Button Collection speichern */
void dvdcollector::dateiOeffnen()
{
/*aufrufen der Funktion zum öffnen einer Datei*/
oeffnen();
}
/*Funktionsname dateiSpeichern() */
/*Funktionsbeschreibung SLOT zum Button Collection speichern */
void dvdcollector::dateiSpeichern()
{
/*aufrufen der Funktion zum speichern einer Datei*/
speichern();
}
/*Funktionsname zufallsFilm() */
/*Funktionsbeschreibung SLOT zum Button Zufallsfilm */
void dvdcollector::zufallsFilm()
{
}
/*Funktionsname bildpfad() */
/*Funktionsbeschreibung SLOT zum Button Bildpfad */
void dvdcollector::bildpfad()
{
if(isEditActive)
/*aufrufen der Funktion zum öffnen des Dialogs*/
pfadDialog();
}
/*Funktionsname verwerfen() */
/*Funktionsbeschreibung SLOT zum Button verwerfen */
void dvdcollector::verwerfen()
{
if (isEditActive)
{
/*Zurückschreiben der alten Elemente
QString name = QString("%1").arg(aktuellerfilm->name);
/*name -> setText(name);
QString genre = QString("%1").arg(aktuellerfilm->genre);
/*genre -> setText(genre);
QString jahr= QString("%1").arg(aktuellerfilm->jahr);
/*jahr -> setText(jahr);
QString studio = QString("%1").arg(aktuellerfilm->studio);
/*studio -> setText(studio);
QString laenge = QString("%1").arg(aktuellerfilm->laenge);
/*laenge -> setText(laenge);
QString darsteller = QString("%1").arg(aktuellerfilm->darsteller);
/*darsteller -> setText(darsteller);
QString usk = QString("%1").arg(aktuellerfilm->usk);
/*usk -> setText(usk);
if ((aktuellerfilm-> verliehen)!= 0)
{
checkBoxVerliehenAn -> setChecked(true);
QString verliehenAn = QString("%1").arg(aktuellerfilm->verliehenAn);
/*verliehenAn-> setText(verliehenAn);
}
/*Sperren der Felder*/
felderSperren(true);
/*Sperren der Knöpfe: Speichern, Verwerfen, Bildpfad*/
isEditActive = false;
}
}
/*Funktionsname filmspeichern() */
/*Funktionsbeschreibung SLOT zum Button Speichern */
void dvdcollector::filmSpeichern()
{
if (isEditActive)
{
/*Holen der Elemente aus den LineEdit's*/
/*aktuellerfilm->name = convert_QString(name->text());
aktuellerfilm->genre = convert_QString(genre->text());
aktuellerfilm->jahr = convert_QString(jahr->text());
aktuellerfilm->regisseur = convert_QString(regisseur->text());
aktuellerfilm->studio = convert_QString(studio->text());
aktuellerfilm->laenge = convert_QString(laenge->text());
aktuellerfilm->darsteller = convert_QString(darsteller->text());
aktuellerfilm->usk = convert_QString(usk->text());*/
isGeaendert = true;
/*Sperren der Felder*/
felderSperren(true);
/*Sperren der Knöpfe: Speichern, Verwerfen, Bildpfad*/
isEditActive = false;
}
}
/*Funktionsname filmSuche() */
/*Funktionsbeschreibung SLOT zum Button Suchen, prüft ebenfalls, nach */
/* was gesucht werden soll */
void dvdcollector::filmSuche()
{
}
void dvdcollector::zeigeFilm()
{
QString filename = QFileDialog::getSaveFileName(this, tr("Speichern unter"),
"", tr("1337 Datei (*.1337)"));
zeigeDetails();
}
void dvdcollector::fuelleListe()
{
/*int i;
for (i = 1; i <= ret_laenge_liste, i++)
{
QString name = QString("%1").arg(*get_next_item);
filmliste -> insertItem(i, name);
}*/
}
void dvdcollector::zeigeDetails()
{
//int filmPosition = (int)item->currentRow();
name -> setText("Honk");
}
/*Funktionsname felderSperren() */
/*Funktionsbeschreibung sperrt und entsperrt die LineEdit's */
/*IN: -bool sichtbarwert: true -> LineEdit's sind erreichbar */
void dvdcollector::felderSperren(bool sichtbarwert)
{
name -> setReadOnly(sichtbarwert);
genre -> setReadOnly(sichtbarwert);
jahr -> setReadOnly(sichtbarwert);
regisseur -> setReadOnly(sichtbarwert);
studio -> setReadOnly(sichtbarwert);
laenge -> setReadOnly(sichtbarwert);
darsteller -> setReadOnly(sichtbarwert);
usk -> setReadOnly(sichtbarwert);
}
/*Funktionsname oeffnen() */
/*Funktionsbeschreibung Fragt den User ob er seine bisherigen arbeiten */
/* abspeichern möchte und ruft einen Öffnen-Dialog */
/* auf*/
void dvdcollector::oeffnen()
{
/*Prüft ob die bisherige Arbeit gespeichert werden soll*/
if (vielleicht_speichern())
{
/*Öffnen des Dialogs und speichern des Pfades in fileName*/
QString fileName = QFileDialog::getOpenFileName(this);
/*Prüft ob der Pfad leer ist*/
if (!fileName.isEmpty())
{
isCollectionGeoeffnet = true;
/*aufrufen der Funktion Sammlungladen()*/
/*Sammlungladen(convert_QString(filename))*/
}
}
}
/*Funktionsname speichern() */
/*Funktionsbeschreibung Ruft einen Speichern-Dialog auf und speichert */
/* die aktuelle Collection */
/*OUT: -bool : liefert zurück ob speichern erfolgreich war */
bool dvdcollector::speichern()
{
/*Speichern-Dialog aufrufen, dieser liefert Pfad filename zurück*/
QString filename = QFileDialog::getSaveFileName(this, tr("Speichern unter"),
"", tr("1337 Datei (*.1337)"));
/*Pfad darf nicht leer sein zum speichern*/
if (!filename.isEmpty())
{
/*Speichern der aktuellen Collection*/
/*Sammlungspeichern(convert_QString(filename))*/
}
}
/*Funktionsname vielleicht_speichern()*/
/*Funktionsbeschreibung Frägt ob der User die aktuelle Colleection */
/* speichern möchte bevor der User die neue Liste */
/* öffnen möchte. */
/*OUT: -bool: liefert zurück, ob der User Save, Discard oder Cancel */
/* drückt*/
bool dvdcollector::vielleicht_speichern()
{
if (isGeaendert)
{
/*QT MessageBox*/
QMessageBox::StandardButton ret;
/*Abfrage was mit aktueller Liste passieren soll*/
ret = QMessageBox::warning(this, tr("Anwendung"),
tr("Das Dokument wurde verändert.\n"
"Möchten sie die aktuelle Collection speichern?"),
QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
if (ret == QMessageBox::Save)
return speichern();
else if (ret == QMessageBox::Cancel)
return false;
}
}
/*Funktionsname pfadDialog() */
/*Funktionsbeschreibung Öffnet einen Dialog in dem der Pfad eines */
/* Objektes gesucht/angegeben werden kann */
void dvdcollector::pfadDialog()
{
QString fileName = QFileDialog::getOpenFileName(this);
}
/*Funktionsname convert_QString() */
/*Funktionsbeschreibung Wandelt einen QString in einen char um */
/*IN: -QString String: der String der umgewandelt werden soll */
/*OUT: -char: der char des umgewandelten Strings */
char dvdcollector::convert_QString (QString String)
{
/*Zwischenspeichern des QStrings in einem Bytearray mit Codierung*/
/*Latin1*/
QByteArray Qba = String.toLatin1();
/*der umgewandelte String*/
char *str_Datei = (char *) Qba.data();
return (*str_Datei);
}