QFrame austauschen

Alles rund um die Programmierung mit Qt
Antworten
the_immortal
Beiträge: 39
Registriert: 31. Mai 2006 21:21
Wohnort: CH

QFrame austauschen

Beitrag von the_immortal »

Ich möchte eine Art Tabs realisieren. Das heisst ich möchte per Event ein QFrame löschen / ausbleden und ein anderes an selber Stelle sichtbar machen.

Ich habe versucht das Frame mit der isVisible() Methode des QWidget unsichtbar zu machen, jedoch vermute ich dass man das QFrame dann noch neu zeichnen müsste, weiss jedoch nicht wie :? !
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Nimm QStackedWidget, für sowas ist es da.
the_immortal
Beiträge: 39
Registriert: 31. Mai 2006 21:21
Wohnort: CH

Beitrag von the_immortal »

macman hat geschrieben:Nimm QStackedWidget, für sowas ist es da.
Ok, ich werde es mal versuchen, scheint genau das zu sein, was ich brauche.

Eine weitere Frage:

Ist es möglich in einer Klasse, welche vom QFrame erbt ein QPushButton zu erstellen, welcher die Klasse in welcher er sich befindet als Argument übergeben wird?

Wenn ich es wie folgt mache und parent übergebe ist der Button dann fix und kann nicht gedrückt werden:

Code: Alles auswählen

EditorFrame::EditorFrame(QWidget *parent) : QFrame(parent)
{
    setFrameShape(QFrame::StyledPanel);
    setFrameShadow(QFrame::Raised);
    
    pushButton = new QPushButton(parent);
    pushButton->setObjectName(QString::fromUtf8("pushButton"));
    pushButton->setGeometry(QRect(20, 10, 75, 24));
    pushButton->setText("on the laksd");

}
hat das was damit zu tun das es im constructer ist? :?
the_immortal
Beiträge: 39
Registriert: 31. Mai 2006 21:21
Wohnort: CH

Beitrag von the_immortal »

Ich habe dem QStackedWidget jetzt 2 Widgets hinzugefügt und kann auch welchseln jedoch über den Slot funktioniert es wiefolgt nicht:

Code: Alles auswählen

            QObject::connect(btn1, SIGNAL(clicked()), mainFrame, SLOT(setCurrentIndex(1)));
ob ich jetzt 1 oder 0 eintrage, das Widget ändert nicht!

:?:
Esleborn
Beiträge: 265
Registriert: 27. Januar 2005 01:23
Wohnort: Baden-Würtenberg
Kontaktdaten:

Beitrag von Esleborn »

du kannst slots nicht so argumente übergeben.
Glaube an eine Lösung, nur dann kannst du auch eine finden.
the_immortal
Beiträge: 39
Registriert: 31. Mai 2006 21:21
Wohnort: CH

Beitrag von the_immortal »

Esleborn hat geschrieben:du kannst slots nicht so argumente übergeben.
besteht die Möglichkeit eine Klasse zu schaffen, welche vom QPushButton erbt und bei einem Click ein eigenes Signal ausgibt mit einem int?
the_immortal
Beiträge: 39
Registriert: 31. Mai 2006 21:21
Wohnort: CH

Beitrag von the_immortal »

Mit Hilfe von Esleborn habe ich nun folgendes erstellt:

TabButton.h

Code: Alles auswählen

#include <QPushButton>

class TabButton : public QPushButton
{
    Q_OBJECT
    
    public:
        TabButton(QWidget *parent=0, int nbr=0);
                 
    signals:
        void clicked(int);
        
    private slots:
        void Clicked();
    
    private:
        int intNbr;    
};
TabButton.cpp

Code: Alles auswählen

#include "TabButton.h"

TabButton::TabButton(QWidget *parent, int nbr) : QPushButton(parent)
{
    intNbr = nbr;
    QObject::connect(this, SIGNAL(clicked(bool)), this, SLOT(Clicked()));
}

void Clicked()
{
    emit clicked(intNbr);
}
so kann dem Button ein int übergeben werden, der dann beim conntecten auf das QStackedWidget verwendet werden kann.

Leider scheint noch ein Fehler im Code enthalten zu sein, denn ich erhalte die Message

Code: Alles auswählen

TabButton.cpp:21: error: `intNbr' undeclared (first use this function)
Esleborn
Beiträge: 265
Registriert: 27. Januar 2005 01:23
Wohnort: Baden-Würtenberg
Kontaktdaten:

Beitrag von Esleborn »

Code: Alles auswählen

void TabButton::Clicked()
{
    emit clicked(intNbr);
}

sollte vllt besser tun
Glaube an eine Lösung, nur dann kannst du auch eine finden.
the_immortal
Beiträge: 39
Registriert: 31. Mai 2006 21:21
Wohnort: CH

Beitrag von the_immortal »

Esleborn hat geschrieben:

Code: Alles auswählen

void TabButton::Clicked()
{
    emit clicked(intNbr);
}

sollte vllt besser tun
Hmmm... den Fehler habe ich gestern auch noch entdeckt und auch verbessert, hat jedoch nicht viel geholfen, da ich weitere Fehlermeldungen erhielt.

Vorhin habe ich die Project und Make Datei gelöscht und neu erstellt & dann kompiliert UND ES FUNKTIONIERT :D jepeee!!
Antworten