[gelöst] Popup für Benutzereingabe
Verfasst: 3. Juni 2006 15:28
Hallo,
ich arbeite immer noch fröhlich an meinem Kalenderprogramm herum und habe jetzt ein viel schnelleres Programm mit QTableWidget statt dem RichText Kram.
Nun möchte ich noch eine Dateneingabe ermöglichen und frage mich, wie das genau geht.
Man könnte einfach eine neue QDialog Klasse anlegen und die mit show() anzeigen, aber das ist ziemlich dösig, da man dann mehrere Fenster öffnen kann und diese auch schnell hinter dem Hauptfenster verschwinden können.
Prinzipiell möchte ich von dem Verhalten sowas wie eine QMessageBox haben, nur das ich das Fenster eben selber erstelle. Wie genau geht man da vor? Wie rufe ich das Fenster auf?
Ich habe bist jetzt eine Klasse Kalender, in der mein QMainWindow definiert ist. Muss der Dialog dann schon als Klassenvariable angelegt sein oder kann ich den einfach irgendwo in einer Funktion neu erstellen?
Wie man sieht bin ich im Moment da leicht konfus. Gibt es ein Tutorial, das sich mit genau dem Thema beschäftigt?
Danke im Vorraus,
hypolit
Edit:
Um das Ganze mal mit Code zu illustrieren:
Der Header meiner QDialogklasse sieht z.B. so aus:
Die cpp der QDialogKlasse:
Jetzt möchte so ein Popup über eine Funktion meiner Hauptfensterklasse aufrufen, z.B. so:
Wobei overpop als Klassenvariable mit
OverView *overpop;
definiert ist.
Falls ich das so versuche, bekomme ich einen
error: 'void QWidget::show()' is inaccessible
Fehler vom Compiler.
Muss man den Kram aus main aus aufrufen?!
Bitte um Aufklärung.
Edit 2:
Prinzipiell soll ist exec() bei einem QDialog wohl ein Slot. Also habe ich mal versucht, das ganze folgendermaßen in dem Konstruktor meiner Hauptklasse zu verbinden:
Also einfach mit dem monthCombo verbunden, weil ich weiß, das der funktioniert.
Kommt wieder ein Compilerfehler und zwar:
error: no matching function for call to 'MainWindow::connect(QComboBox*&, const char [16], OverView&, const char [8])'
Möp.
ich arbeite immer noch fröhlich an meinem Kalenderprogramm herum und habe jetzt ein viel schnelleres Programm mit QTableWidget statt dem RichText Kram.
Nun möchte ich noch eine Dateneingabe ermöglichen und frage mich, wie das genau geht.
Man könnte einfach eine neue QDialog Klasse anlegen und die mit show() anzeigen, aber das ist ziemlich dösig, da man dann mehrere Fenster öffnen kann und diese auch schnell hinter dem Hauptfenster verschwinden können.
Prinzipiell möchte ich von dem Verhalten sowas wie eine QMessageBox haben, nur das ich das Fenster eben selber erstelle. Wie genau geht man da vor? Wie rufe ich das Fenster auf?
Ich habe bist jetzt eine Klasse Kalender, in der mein QMainWindow definiert ist. Muss der Dialog dann schon als Klassenvariable angelegt sein oder kann ich den einfach irgendwo in einer Funktion neu erstellen?
Wie man sieht bin ich im Moment da leicht konfus. Gibt es ein Tutorial, das sich mit genau dem Thema beschäftigt?
Danke im Vorraus,
hypolit
Edit:
Um das Ganze mal mit Code zu illustrieren:
Der Header meiner QDialogklasse sieht z.B. so aus:
Code: Alles auswählen
#include <QApplication>
#include <QDialog>
class OverView : QDialog
{
Q_OBJECT
public:
OverView(QWidget *parent = 0);
};
Code: Alles auswählen
#include "overview.h"
OverView::OverView(QWidget *parent) : QDialog(parent)
{
}
Code: Alles auswählen
void MainWindow::popup()
{
overpop = new OverView();
overpop->show();
}
OverView *overpop;
definiert ist.
Falls ich das so versuche, bekomme ich einen
error: 'void QWidget::show()' is inaccessible
Fehler vom Compiler.
Muss man den Kram aus main aus aufrufen?!
Bitte um Aufklärung.
Edit 2:
Prinzipiell soll ist exec() bei einem QDialog wohl ein Slot. Also habe ich mal versucht, das ganze folgendermaßen in dem Konstruktor meiner Hauptklasse zu verbinden:
Code: Alles auswählen
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), kaldata(), overpop()
{
datum = QDate::currentDate();
setupUi(this);
monthCombo->setCurrentIndex(datum.month()-1);
yearSpin->setDate(datum);
connect(monthCombo, SIGNAL(activated(int)), this, SLOT(setMonth(int)));
connect(yearSpin, SIGNAL(dateChanged(QDate)), this, SLOT(setYear(QDate)));
connect(monthCombo, SIGNAL(activated(int)), overpop, SLOT(exec()));
}
Kommt wieder ein Compilerfehler und zwar:
error: no matching function for call to 'MainWindow::connect(QComboBox*&, const char [16], OverView&, const char [8])'
Möp.