Seite 1 von 1

[gelöst] Popup für Benutzereingabe

Verfasst: 3. Juni 2006 15:28
von hypolit
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:

Code: Alles auswählen

#include <QApplication>
#include <QDialog>

class OverView : QDialog
{
  Q_OBJECT

    public:
  OverView(QWidget *parent = 0);

};
Die cpp der QDialogKlasse:

Code: Alles auswählen

#include "overview.h"

OverView::OverView(QWidget *parent) : QDialog(parent)
{

}
Jetzt möchte so ein Popup über eine Funktion meiner Hauptfensterklasse aufrufen, z.B. so:

Code: Alles auswählen

void MainWindow::popup()
{
  overpop = new OverView();
  overpop->show(); 
}
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:

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()));
}
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.

Verfasst: 3. Juni 2006 17:04
von patrik08
Es gibt bereits fertige standard dialoge fur text zahlen text ecc...

qt4\examples\dialogs\standarddialogs\release

Verfasst: 3. Juni 2006 17:22
von hypolit
Danke, genau sowas brauche ich.

Habe nebenbei auch rausgefunden, warum meine eigene Dialogklasse kein exec() annimmt:
Es muss QDialog wurde nicht als public vererbt, doof.