[gelöst] Slot-Problem

Alles rund um die Programmierung mit Qt
Antworten
kleineSchildy
Beiträge: 76
Registriert: 16. September 2004 18:29
Wohnort: Dresden

[gelöst] Slot-Problem

Beitrag von kleineSchildy »

Hallo,

ich komm einfach nicht dahinter, warum der Slot nicht ausgeführt wird :?

Ich habe mein MainWindow in welche ich ein Child erzeuge

Code: Alles auswählen

void MyMainWindow::openChild()
{
    //Session erstellen 
    session = new MyChild("Simulation Modules");
    session->createSessionWidget();
    
    //Session anzeigen
    mdiArea->addSubWindow(session);
 	
   //Connections
   connect(session->rbProcess, SIGNAL(triggered()), session, SLOT(openModul()));
    
   session->show();	
}
Das Child sieht folgermaßen aus:

Code: Alles auswählen

MyChild::MyChild(QString sTitle)
{
    setAttribute(Qt::WA_DeleteOnClose);
    setWindowTitle(sTitle);
}

void MyChild::createSessionWidget()
{
    //GroupBox festlegen
    QGroupBox *gbSource = new QGroupBox(tr("Source"));
    QRadioButton *rbTophat = new QRadioButton(tr("Tophat"));
    QRadioButton *rbProcess = new QRadioButton(tr("Processed Measured"));
    QRadioButton *rbSynthes = new QRadioButton(tr("Synthesized Physical"));
    
	QVBoxLayout *blSource = new QVBoxLayout;
    blSource->addWidget(rbTophat);
    blSource->addWidget(rbProcess);
    blSource->addWidget(rbSynthes);
    gbSource->setLayout(blSource);
    
    QGridLayout *grid = new QGridLayout;
    grid->addWidget(gbSource,0,0);
    grid->setSizeConstraint(QLayout::SetMinimumSize);
    
    this->setLayout(grid);
}

void MyChild::openModul()
{
 	 QMessageBox::information(this, "Test", "Test");    	 
}
Wobei die Buttons und auch der Slot "public" sind.

Die Frage ist jetzt, wo liegt der Fehler, dass meine MessageBox nicht angezeigt wird :( Es ist bestimmt ein dummer Fehler, aber ich weiß nicht, was ich ändern sollte.

Vielen Dank für eure Hilfe.

Viele Grüße
Jana
Zuletzt geändert von kleineSchildy am 30. November 2007 12:13, insgesamt 1-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Auf der Konsole gibt es auch keine Fehlermeldung?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

upsala hat geschrieben:Auf der Konsole gibt es auch keine Fehlermeldung?
Doch, hundertprzentig. QPushButton hat kein SIGNAL triggered() ...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Das war eine rein rhetorische Frage...
rage
Beiträge: 11
Registriert: 24. Juli 2007 18:40
Wohnort: Berlin
Kontaktdaten:

Beitrag von rage »

Hast du qmake ausgeführt, nachdem du den Slot hinzugefügt hattest?
kleineSchildy
Beiträge: 76
Registriert: 16. September 2004 18:29
Wohnort: Dresden

Beitrag von kleineSchildy »

Hallo alle zusammen,

@Christian
Das habe ich auch schon gefunden, in "clicked() geändert. Am Ergebnis ändert es leider nix.

Ich arbeite mit Dev-C++ und da wird mir leider kein Fehler ausgegeben. Auf der Konsole erscheint bloß der Hinweis:
Der Befehl "mingw32-make" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Ich weiß nicht, was das Problem ist. Der Slot vom Child ist public. Also sollte er vom MainWindow doch ausführbar sein.

@rage
Wie meinst du das? Die moc-Dateien werden erstellt, also wird wohl qmake ausgeführt worden sein. Mit anderen Connections, wie zum Beispiel in einer Action, habe ich ja auch keine Probleme.

Viele Grüße
Jana
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ggf. Header-Dateien nicht im pro-File. Oder Q_OBJECT vergessen oder mal die console anschauen (CONFIG += console) und während der Laufzeit schauen was passiert.

Wenn er mingw32-make nicht findet wird es wohl nicht im PATH sein... :roll:

Im Grunde alles Problemlösungen die hier schon hunderte Male angeraten wurden, aber die Suche bedienen ist wohl zu schwer... :(
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
kleineSchildy
Beiträge: 76
Registriert: 16. September 2004 18:29
Wohnort: Dresden

Beitrag von kleineSchildy »

Hallo Christian,

sorry, aber ich habe schon die Hilfe bemüht und leider nix gefunden.

Q_OBJECT wurde nicht vergessen und das pro-File habe ich mir auch schon angeschaut und da ist alles drin.

Das einzige was die Konsole ausspuckt ist
QObject::connect: Cannot connect (null)::clicked() to MyChild::openModul()
Er scheint das Objekt nicht zu kennen, aber die RadioButtons im Child sind auch public.

Viele Grüße
Jana
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

Beitrag von gerome69 »

kleineSchildy hat geschrieben: Das einzige was die Konsole ausspuckt ist
QObject::connect: Cannot connect (null)::clicked() to MyChild::openModul()
Da steht doch eine ganze Menge Konkretes.

Schau mal hier:

Code: Alles auswählen

   connect(session->rbProcess, SIGNAL(triggered()), session, SLOT(openModul()));
   
[...]

void MyChild::createSessionWidget()
{
[...]
    QRadioButton *rbProcess = new QRadioButton(tr("Processed Measured")); 

Das connect schlägt fehl, weil es der Sender nicht existiert.
Warum?
Du definierst ihn als QRadioButton innerhalb von createSessionWidget als lokale Variable, die nach verlassen dieser Methode wieder freigegeben wird.
Hast du im Header MyChild.h rbProcess auch definiert als public? Scheinbar ja.
Dann muß es in createSessionWidget aber heißen:

rbProcess = new QRadioButton(tr("Processed Measured"));

Gruß, Géôme


Hast du ihn
kleineSchildy
Beiträge: 76
Registriert: 16. September 2004 18:29
Wohnort: Dresden

Beitrag von kleineSchildy »

Hallo Gerome,

vielen Dank, das wars. So ein dummer Fehler :oops:

Viele Grüße
Jana
Antworten