Seite 1 von 1

[gelöst] QMessageBox erscheint nicht, okButton ohne Funktion

Verfasst: 21. November 2007 14:29
von Andreas H.
Hallo zusammen,
nach langem Zögern bitte ich um Hinweise, was im folgenden Code falsch ist.
Der okButton soll eine QMessageBox aufrufen, bleibt aber ohne Funktion.
Der Code wird fehlerfrei kompiliert. Sicherlich handelt es sich um einen blöden Anfängerfeher, aber all meine [Ver]Suche war[en] erfolglos.

Datei main.cpp

Code: Alles auswählen

#include <QApplication>
#include <QDialog>

#include "netloader.h"

int main(int argc, char *argv[])
{
	QApplication netloader(argc, argv);
	QDialog *dialog = new QDialog;
	Ui::NetloaderDialog ui;
	ui.setupUi(dialog);

	dialog->show();

	return netloader.exec();
Datei netloader.h

Code: Alles auswählen

#ifndef NETLOADER_H
#define NETLOADER_H
#include <QDialog>
#include "ui_netloaderdialog.h"

class Netloader : public QDialog, public Ui::NetloaderDialog
{
	Q_OBJECT
	
public:
    Netloader(QWidget *parent = 0);
	
private slots:
    void on_okButton_clicked();
};
#endif

Datei netloader.cpp

Code: Alles auswählen

#include <QDialog>
#include <QMessageBox>

#include "netloader.h"

Netloader::Netloader(QWidget *parent)
    : QDialog(parent)
{
    setupUi(this);

    connect(okButton, SIGNAL(clicked()), this, SLOT(on_okButton_clicked()));


}

 void Netloader::on_okButton_clicked()
{
 QMessageBox::information(this, tr("NetLoader"),
            tr("<h2>NetLoader 0.1</h2>"
               "<p>Einfach Anwendungen aus dem Internet updaten... </p>"));
}
Die Datei ui_netloaderdialog.h wird wohl nicht nötig sein, da mit Designer / moc erstellt. Deshalb funkt. auch der abbrechenButton :?
Allen die sich bemühen, vielen herzlichen Dank.

Andreas

Verfasst: 21. November 2007 15:29
von solarix
Das funktioniert nicht, weil

Code: Alles auswählen

QDialog *dialog = new QDialog; 
das keine Instanz deiner Klasse "Netloader" ist, sondern (man hoere und staune) von "QDialog"...
Mit anderen Worten: du erstellt einen Dialog mit deiner im Designer erstellen Oberflaeche ("setupUi(dialog)")... das sieht zwar gleich aus wie eine "Netloader"-Instanz , tut aber nichts..

Verfasst: 21. November 2007 19:37
von Andreas H.
....ich wusste es wird peinlich.
Vielen herzlichen Dank für die Antwort. Ich habe den Fehler bei den Signal / Slots vermutet und nur dort verzweifelt gesucht.

Hier die berichtigte Version von main.cpp

Code: Alles auswählen

#include <QApplication>

#include "netloader.h"

int main(int argc, char *argv[])
{
	QApplication ap(argc, argv);
	Netloader *dialog = new Netloader;

	dialog->show();

	return ap.exec();
}
Im Übrigen kann, nein muss man den connect - Aufruf in netloader.cpp auch weglassen, wenn der Slot nach dem Schema: on_signalgeber_signal erstellt wurde.
Die Funktion "void Netloader::on_okButton_clicked()"wird sonst 2 mal aufgerufen.