Seite 1 von 1
QToolBar::addAction buggy?
Verfasst: 10. Januar 2006 10:13
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
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?
Re: QToolBar::addAction buggy?
Verfasst: 10. Januar 2006 13:47
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.
Re: QToolBar::addAction buggy?
Verfasst: 10. Januar 2006 13:59
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.
Re: QToolBar::addAction buggy?
Verfasst: 10. Januar 2006 14:24
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.
Re: QToolBar::addAction buggy?
Verfasst: 10. Januar 2006 15:04
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.
Re: QToolBar::addAction buggy?
Verfasst: 10. Januar 2006 15:27
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.
Re: QToolBar::addAction buggy?
Verfasst: 10. Januar 2006 15:30
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.
Re: QToolBar::addAction buggy?
Verfasst: 10. Januar 2006 16:03
von macman
Bei mir aber. Qt4.1.1 mit XP. Nur die eine Zeile eingefügt, ansonsten wurde das Projekt nicht geändert.
Re: QToolBar::addAction buggy?
Verfasst: 10. Januar 2006 16:24
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