connect Problem, on_clicked Ereignis wird nicht aufgerufen

Alles rund um die Programmierung mit Qt
Antworten
skfink
Beiträge: 16
Registriert: 25. März 2008 16:25

connect Problem, on_clicked Ereignis wird nicht aufgerufen

Beitrag von skfink »

Hallo,

ich habe auf einer QMainWindow ein QPushButton der zur Laufzeit bei einem click einen zweiten PushButton (pb1) erstellt. Bei Klick auf pb1 soll ein Label erstellt werden. Aber die Funktion wird nicht aufgerufen. Ich hab alle möglichen Variationen ausprobiert, aus Forensuche und Qt Tutorials konnte ich auch keine zielführenden Infos gewinnen.

Der Header:

Code: Alles auswählen

#ifndef SCROLLBOOK_H
#define SCROLLBOOK_H

#include <QtGui/QMainWindow>
#include "ui_scrollbook.h"
#include <QtGui>

class ScrollBook : public QMainWindow
{
    Q_OBJECT

public:
    ScrollBook(QWidget *parent = 0);
    ~ScrollBook();

private:
    QLabel *label1;
    QPushButton *pb1;
    Ui::ScrollBookClass ui;
private slots:
	void on_pushButton_clicked();
	void on_pb1_clicked();
};

#endif // SCROLLBOOK_H
und die cpp:

Code: Alles auswählen

#include "scrollbook.h"
#include "ui_scrollbook.h"
#include <QtGui>


ScrollBook::ScrollBook(QWidget *parent)
    : QMainWindow(parent)
{
	ui.setupUi(this);
	setFixedSize(200, 200);
}

ScrollBook::~ScrollBook()
{

}

void ScrollBook::on_pushButton_clicked()
{
	pb1 = new QPushButton(tr("Label erzeugen"), this);
	pb1->setGeometry(62, 80, 75, 30);
	pb1->setFont(QFont("Times", 12, QFont::Bold));
	pb1->show();
	connect(this, SIGNAL(clicked()), pb1, SLOT(clicked()));
}

void ScrollBook::on_pb1_clicked()
{
	label1 = new QLabel(tr("ein Label ohne Sinn und Zweck"), this);
	label1->setGeometry(62, 120, 120, 25);
	label1->setFont(QFont("Times", 14, QFont::Bold));
	label1->show();
}
Eigentlich würde ich ja erwarten, gar kein connect nutzen zu müssen, da die Verbindung über den Namen (wie bei pushButton auch) klar sein müsste....geht aber auch nicht.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du bekommst auf der Konsole eine Fehlermeldung, daß es den Slot click() nicht gibt.
skfink
Beiträge: 16
Registriert: 25. März 2008 16:25

Beitrag von skfink »

nein, compilieren lässt sich das Programm. Es wird halt lediglich das Label beim Knopfdruck auf den zweiten Button nicht erzeugt, weil die Funktion nicht aufgerufen wird.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Warum sollte auch etwas passieren? Du hast ja nirgendwo im Programm definiert das etwas beim Klick auf den Button passieren soll. Du solltest dir lieber nochmal das Tutorial anschauen.


Nur so ein Tipp:
Mit connect verbindest du das Signal mti dem Slot, also _nachdem_ connect aufgerufen wurde wird das Signal den Slot auslösen.
myme
Beiträge: 24
Registriert: 31. März 2008 14:25

Beitrag von myme »

skfink hat geschrieben:nein, compilieren lässt sich das Programm. Es wird halt lediglich das Label beim Knopfdruck auf den zweiten Button nicht erzeugt, weil die Funktion nicht aufgerufen wird.
Dein connect wird zur Laufzeit meckern, dass es den Slot click nicht gibt.

Code: Alles auswählen

connect(this, SIGNAL(clicked()), pb1, SLOT(clicked()));
Diese Zeile besagt, dass bei einem ScrollBook Signal 'clicked' der Slot 'clicked' des Buttons 'pb1' aufgerufen werden soll.
Du meintest eventuell:

Code: Alles auswählen

connect(pb1, SIGNAL(clicked()), this, SLOT(on_pb1_clicked()));
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Myme du hast Recht, es würde zur Laufzeit meckern. Wird es aber nie, da das connect niemals aufgerufen wird.
myme
Beiträge: 24
Registriert: 31. März 2008 14:25

Beitrag von myme »

Stimmt, wenn man obigen Code anschaut. Allerdings sollte er das Problem ja schon gelöst haben, siehe auch hier:
http://www.qt-forum.de/forum/viewtopic.php?t=6470
skfink
Beiträge: 16
Registriert: 25. März 2008 16:25

Beitrag von skfink »

myme hat geschrieben: Du meintest eventuell:

Code: Alles auswählen

connect(pb1, SIGNAL(clicked()), this, SLOT(on_pb1_clicked()));
ja danke, das wars.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Der connect-Befehl wäre richtig, trotzdem würde er nach dem obigen Code niemals ausgeführt werden..
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

PeterLustig hat geschrieben:Der connect-Befehl wäre richtig, trotzdem würde er nach dem obigen Code niemals ausgeführt werden..
Warum nicht? Weiterentwicklung von Qt verpasst? :) Es gibt inzwischen auto connects. Die funktionieren natürlich nicht bei dynamisch generierten Widgets.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Das war mir in der Tat nicht bekannt, danke für den Link! :)
Antworten