QToolBar::addAction buggy?

Alles rund um die Programmierung mit Qt
Antworten
arne.anka
Beiträge: 32
Registriert: 28. Dezember 2005 14:06

QToolBar::addAction buggy?

Beitrag von arne.anka »

ich verwende folegende methode:

Code: Alles auswählen

QToolBar::addAction ( const QString & text, const QObject * receiver, const char * member )
mein klasse (abgeleiett von QToolBar) hat den slot

Code: Alles auswählen

slotBttnTriggered()
wenn ich jetzt also

Code: Alles auswählen

meineToolBar->addAction(einIcon, "button", meineToolBar, "slotBttnTriggered()");
verwende, sollte lt doc das triggered()-signal der qaction mit dem angegebenen slotBttnTriggered() verbunden werden.
was kommt ist:

Code: Alles auswählen

Object::connect: Use the SLOT or SIGNAL macro to connect MeineToolBar::SLOT(slotBttnTriggered())
und im quellcode steht auch (qtoolbar.cpp z670):

Code: Alles auswählen

QObject::connect(action, SIGNAL(triggered()), receiver, member);
keine rede von SLOT() ...
ist das ein bug oder habe ich die doc gründlich missverstanden?
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: QToolBar::addAction buggy?

Beitrag von macman »

arne.anka hat geschrieben:ist das ein bug oder habe ich die doc gründlich missverstanden?
Letzteres. Deine Beschreibung ist etwas wirr, zumal dein Aufruuf nicht mit der angeblich verwendeten Methode überein stimmt. Die Fehlermeldung sagt aber alles, Du mußt das SLOT-Macro benutzen. Da wo also der Slot angegeben wird, muß auch "SLOT(meinSlot())" stehen und nicht nur "meinSlot()". Gleiches gilt für Signals.
arne.anka
Beiträge: 32
Registriert: 28. Dezember 2005 14:06

Re: QToolBar::addAction buggy?

Beitrag von arne.anka »

macman hat geschrieben: nicht mit der angeblich verwendeten Methode überein stimmt.
lt doc soll da der member stehen -- und ein member ist mw eine methode.
"const char * member" interpretiere ich so, dass da der methodenname als string zu stehen hat.
macman hat geschrieben:
Die Fehlermeldung sagt aber alles, Du mußt das SLOT-Macro benutzen. Da wo also der Slot angegeben wird, muß auch "SLOT(meinSlot())" stehen und nicht nur "meinSlot()". Gleiches gilt für Signals.
hatte ich auch probiert (legte sich nach betrachtung des quellcodes nahe) -- ändert nix.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: QToolBar::addAction buggy?

Beitrag von macman »

arne.anka hat geschrieben:hatte ich auch probiert (legte sich nach betrachtung des quellcodes nahe) -- ändert nix.
Dann gib mal mehr Code, eventuell auch das ganze Projekt, wenn es noch nicht zu groß ist.
arne.anka
Beiträge: 32
Registriert: 28. Dezember 2005 14:06

Re: QToolBar::addAction buggy?

Beitrag von arne.anka »

macman hat geschrieben: Dann gib mal mehr Code, eventuell auch das ganze Projekt, wenn es noch nicht zu groß ist.
ich habe hier schon zuviel code und es mittlerweilen auch ganz anders gelöst.
aber zum testen kannst du ja eventuell mal das torrent-example nutzen (das ist das einzige mit einer QToolBar):
in mainwindow.cpp, etwa zeile 130,

Code: Alles auswählen

// Top toolbar
    QToolBar *topBar = new QToolBar(tr("Tools"));
    addToolBar(Qt::TopToolBarArea, topBar);
    topBar->setMovable(false);
    topBar->addAction(newTorrentAction);
die mit "<-- neu" markierte linie einfügen.

Code: Alles auswählen

// Top toolbar
    QToolBar *topBar = new QToolBar(tr("Tools"));
    addToolBar(Qt::TopToolBarArea, topBar);
    topBar->setMovable(false);
    topBar->addAction("test", this, "removeTorrent()"); //<-- neu!
    topBar->addAction(newTorrentAction);
dann bekommst du einen button "test", der _eigentlich_ den markierten torrent löschen sollte (der slot ist der gleiche, den auch der eintrag im File-menu aufruft) -- macht er aber nicht.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: QToolBar::addAction buggy?

Beitrag von macman »

arne.anka hat geschrieben:der _eigentlich_ den markierten torrent löschen sollte (der slot ist der gleiche, den auch der eintrag im File-menu aufruft) -- macht er aber nicht.
Weil Du keinen Slot angeben hast. Mach es so:

Code: Alles auswählen

// Top toolbar
    QToolBar *topBar = new QToolBar(tr("Tools"));
    addToolBar(Qt::TopToolBarArea, topBar);
    topBar->setMovable(false);
    topBar->addAction( "test", this, SLOT(removeTorrent()) ); //<-- neu!
    topBar->addAction(newTorrentAction); 
und es funktioniert.
arne.anka
Beiträge: 32
Registriert: 28. Dezember 2005 14:06

Re: QToolBar::addAction buggy?

Beitrag von arne.anka »

Weil Du keinen Slot angeben hast. Mach es so:

Code: Alles auswählen

// Top toolbar
    QToolBar *topBar = new QToolBar(tr("Tools"));
    addToolBar(Qt::TopToolBarArea, topBar);
    topBar->setMovable(false);
    topBar->addAction( "test", this, SLOT(removeTorrent()) ); //<-- neu!
    topBar->addAction(newTorrentAction); 
und es funktioniert.
nein.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: QToolBar::addAction buggy?

Beitrag von macman »

Bei mir aber. Qt4.1.1 mit XP. Nur die eine Zeile eingefügt, ansonsten wurde das Projekt nicht geändert.
arne.anka
Beiträge: 32
Registriert: 28. Dezember 2005 14:06

Re: QToolBar::addAction buggy?

Beitrag von arne.anka »

macman hat geschrieben:Bei mir aber. Qt4.1.1 mit XP.
interessant. bei mir ist es 4.1.0 mit linux/xorg 6.9.
entweder ist das so ein plattform-sache (was ich kaum glaube) oder die haben in 4.1.1 was gefixt.
gleich mal nachschauen.
danke
Antworten