Seite 1 von 1

button->setDisabled() - Button als Funktionsparameter?

Verfasst: 10. September 2009 13:44
von Nikki
Hallo zusammen,
hoffe ich bin hier richtig. :wink:
Und ich hoffe auch, dass ich mich richtig ausdrücke....

Ich arbeite langsam aber stetig an einem kleinen Programm, dass u.a. Audiodateien abspielt.

Also habe ich einen Button "playbutton", welcher über click() mit dem Slot play() verbunden ist.

Darin ist eine C-Funktion enthalten, die dann die Audiodatei abspielt.

Nun soll ein anderer Button solange deaktiviert bleiben, bis die Datei zu Ende abgespielt wurde.

Code: Alles auswählen

fileopenbutton->setDisabled(false);
Dies ist die grobe Form meines Programmes:

Code: Alles auswählen

static int Call(){
   ...........
}

void MyWidget::play(){
...........
 Call(Audio,xxx,xx);
..........
}


MyWidget::MyWidget(QWidget *parent)
	: QWidget(parent){
.........
playbutton = new QPushButton(tr("play"), this);
connect(playbutton, SIGNAL(clicked()), this, SLOT(play()));
.........
}

int main(int argc, char **argv){
}

Gibt es eine Möglichkeit, einen QPushbutton als Parameter an eine Funktionen zu übergeben?
Oder gibt es eine andere Stelle im Programm, an welcher der Befehl ->setDisabled() zum gewünschten Ziel führt?

Dank im Voraus

:)

Verfasst: 10. September 2009 14:07
von Curtis Newton
QPushbutton hat zwei slots, die können Dir vielleicht helfen:

void setDisabled ( bool disable )
void setEnabled ( bool )

C.

Re: button->setDisabled() - Button als Funktionsparameter

Verfasst: 10. September 2009 14:15
von Mani99
Nikki hat geschrieben: Gibt es eine Möglichkeit, einen QPushbutton als Parameter an eine Funktionen zu übergeben?
Ja sicher, warum denn nicht?

Code: Alles auswählen

bool tuIrgendWas(QPushButton *button) { //.... }

Re: button->setDisabled() - Button als Funktionsparameter

Verfasst: 10. September 2009 14:40
von Curtis Newton
Mani99 hat geschrieben:
Nikki hat geschrieben: Gibt es eine Möglichkeit, einen QPushbutton als Parameter an eine Funktionen zu übergeben?
Ja sicher, warum denn nicht?

Code: Alles auswählen

bool tuIrgendWas(QPushButton *button) { //.... }
Weil es unsauber ist. Was hat tuIrgendWas mit irgendwlechen Buttons zu tun? Sauberer ist es, bei beginn des Abspielens ein signal zu senden, dass alle hören wollen, die es betrifft (also die man damit connected hat) und beim beenden des Abspielens wieder eines.

C.

Verfasst: 10. September 2009 14:51
von Mani99
Was hat tuIrgendWas mit irgendwlechen Buttons zu tun?
Du kannst gerne einen besseren namen für die methode vergeben wenn dir einer einfällt!
Weil es unsauber ist.
Er wollte wissen wie man einen button übergibt, von sauber oder unsauber war nie die rede!

Verfasst: 10. September 2009 15:19
von Curtis Newton
Mani99 hat geschrieben:
Was hat tuIrgendWas mit irgendwlechen Buttons zu tun?
Du kannst gerne einen besseren namen für die methode vergeben wenn dir einer einfällt!
Weil es unsauber ist.
Er wollte wissen wie man einen button übergibt, von sauber oder unsauber war nie die rede!
Richtig. Du aber frugst: "Ja sicher, warum denn nicht?".

Meine Antwort war jetzt kein Angriff oder so auf Dich, Du hast formal mit Deiner Antwort völlig recht. Ich wollte lediglich den Anstoß geben, hier doch nochmal das Design zu überdenken ;-)

C.

Verfasst: 10. September 2009 15:45
von Nikki
Hi

- zunächst mal : Hier will eine SIE was wissen! - :D
Trotzdem danke für die Antworten. :wink:
Ja sicher, warum denn nicht?
Code:
bool tuIrgendWas(QPushButton *button) { //.... }
Wie sieht denn der Funktionsaufruf dazu aus?

Code: Alles auswählen

tuIrgendwas(???);
Bei mir hapert's immer noch mit den Zeigern.....

Weil es unsauber ist.
Sicher würde ich lieber mit Signalen arbeiten.
Es ist nunmal eine C-Funktion. - Wie können denn nicht-qt-Objekte ein Signal senden?

Verfasst: 10. September 2009 16:13
von Mani99
Entschuldigung, dein geschlecht geht leider nicht aus deinem nick oder so hervor.

Zeiger in der *.h

Code: Alles auswählen

//....
private:
QPushButton *mein_button;

public:
void tuIrgendWas(QPushButton *button);
Zeiger in der *.cpp

Code: Alles auswählen

void sonstEineMethode()
{
   mein_button = new QPushButton(this);
   tuIrgendWas(mein_button);
}

void tuIrgendWas(QPushButton *button)
{
   //...irgendwas passiert hier in der methode
}
Alles klar?

Verfasst: 10. September 2009 18:34
von Nikki
Danke für die Antwort. :)

Es kann sehr gut sein, dass es auf diese Weise funktioniert.

Was ich völlig übersehen habe: Funktion ist vordefiniert und lässt keine weitere Parameterübergabe zu. :oops:

Einen Versuch war es wert. :)

Verfasst: 11. September 2009 10:53
von RHBaum
Es ist nunmal eine C-Funktion. - Wie können denn nicht-qt-Objekte ein Signal senden?
du hasst ne C funktion ??? und der willst du nen QPushButton(zeiger) übergeben ???
Ich glaub nich das die implementation der funktion was damit anfangen könnte :twisted:

erzaehl mal bissi mehr über die c-funktion, vielleicht wird dann dein eigentliches problem klarer ....

Ciao ...