Indeed, thank you so much Jose! thanks, canal
________________________________ From: José Arcángel Salazar Delgado <[email protected]> To: [email protected] Sent: Sat, October 2, 2010 12:47:44 PM Subject: Re: [Qt-jambi-interest] to determine which button is clicked in the signal/slot On Vie 01 Oct 2010 03:49:09 go canal escribió: > Hi, > I have one more question - > - SignalMapper is to re-emit th signal from the source with the additional > parameter to identify the source > - but how to pass the parameter emitted from the original signal ? > > for example, my source has a slot which emits a String: > public class Source extends QWidget { > public Signal1<String> loaded = new Signal1<String>(); > .... > private void loadedCompleted () { > // get some data then emit > this.loaded.emit (st); > } > } QSignalMapper can send int, String or inhereted Objets or QWidgets. You can create a custom class that handle the orignal emited parameter with extra parameter to recognice the emitter. Then you can cast the Object in the slot and that do the trick. > > In the destination side: > public class Destination extends QWidget { > private QSignalMapper mapper; > ....... > public void init () { > // establish the link > sourceObject.loaded.connect(mapper, "map()"); > mapper.setMapping(sourceObject, sourceObject); > } > > // slot can receive the source but no parameter for the original String > private void processLoaded (QObject p) { > } > > } > > > thanks, > canal > > > > > ________________________________ > From: go canal <[email protected]> > To: [email protected] > Sent: Thu, September 30, 2010 2:39:22 PM > Subject: Re: [Qt-jambi-interest] to determine which button is clicked in > the signal/slot > > > Thank you for the quick response.Everything is ok now ! > thanks, > canal > > > > > ________________________________ > From: José Arcángel Salazar Delgado <[email protected]> > To: [email protected] > Sent: Thu, September 30, 2010 12:47:02 PM > Subject: Re: [Qt-jambi-interest] to determine which button is clicked in > the signal/slot > > On Mié 29 Sep 2010 23:28:53 go canal escribió: > > Thank you. > > Here is my code - first I create a tab with a '+' button; when click the > > '+' button, insert a new tab which has a 'x' button for removing the tab. > > The code works - I can capture the signal and determine which tab; but > > strange though, I capture two signals for one click. I have no idea why: > > > > public class MyTab extends QTabWidget { > > public MyTab (QWidget parent) { > > super (parent); > > initialize(); > > } > > > > // create the home page with the '+' button. > > private void initialize() { > > QWidget homePage = new QWidget(); > > this.insertTab (0, homePage, "Home"); > > QPushButton plusButton = new QPushButton("+"); > > plusButton.setMaximumWidth (30); > > plusButton.clicked.connect (this, "addTab()"); > > this.tabBar().setTabButton (0, ButtonPosition.RightSide, plusButton); > > > > signalMapper = new QSignalMapper (this); > > > > } > > private void addTab () { > > QWidget page = new QWidget(); > > this.insertTab(1, page, "New Page"); > > // add a 'x' button > > QPushButton deleteButton = new QPushButton("x"); > > deleteButton.setMaximumWidth(30); > > this.tabBar().setTabButton(1, ButtonPosition.RightSide, deleteButton); > > > > deleteButton.clicked.connect(signalMapper, "map()"); > > signalMapper.setMapping(deleteButton, (QObject)page); > > Here is the problem. The conecction with the signal mapper is repeated > multiples times. If you have two tabs, you create two connections. > Make this connection in the initialize method. > > signalMapper.mappedQObject.connect(this, "deleteTab(QObject)"); > > > } > > // this is called twice, why ??? > > private void deleteTab (QObject page) { > > if (page != null && page instanceof QWidget) { > > int index = this.indexOf ((QWidget)page); > > System.out.println ("delete tab " + index); > > } > > } > > > > > > } > > > > thanks, > > > > canal > > > > > > > > > > ________________________________ > > From: José Arcángel Salazar Delgado <[email protected]> > > To: [email protected] > > Sent: Wed, September 29, 2010 10:52:59 PM > > Subject: Re: [Qt-jambi-interest] to determine which button is clicked in > > the signal/slot > > > > On Mié 29 Sep 2010 00:41:56 go canal escribió: > > > Hi, > > > a newbie question and sorry if it was asked before, I googled it but > > > have > > > > > > not find good answer: > > > I have a tab widget, a few tabs, each tab has a close button. When I > > > > > > clicked the close button, I want to remove the tab. Question is, how do > > > I know which button is clicked in the connection: > > > > > > public class MyTab extends QTabWidget { > > > ...... > > > > > > private void addTab () { > > > QPushButton deleteButton = new QPushButton("x"); > > > deleteButton.setMaximumWidth(30); > > > tabBar.insertTab (1, "New Page"); > > > tabBar.setTabButton(1, ButtonPosition.RightSide, deleteButton); > > > deleteButton.clicked.connect(this, "deleteTab()"); > > > } > > > private void deleteTab () { > > > // how do we know which button is clicked, and which tab I should > > > remove ? } > > > > Hello. > > > > You have two options. One if to use the signalSender method to obtaind > > the object that emit the signal that triggers the slot. Two is to use > > the QSignalMapper class to map the all the signal y one slot. > > > > > } > > > > > > thanks, > > > > > > canal > > > > _______________________________________________ > > Qt-jambi-interest mailing list > > [email protected] > > http://lists.trolltech.com/mailman/listinfo/qt-jambi-interest > > _______________________________________________ > Qt-jambi-interest mailing list > [email protected] > http://lists.trolltech.com/mailman/listinfo/qt-jambi-interest _______________________________________________ Qt-jambi-interest mailing list [email protected] http://lists.trolltech.com/mailman/listinfo/qt-jambi-interest
_______________________________________________ Qt-jambi-interest mailing list [email protected] http://lists.trolltech.com/mailman/listinfo/qt-jambi-interest
