Surjya Narayana Padhi
Surjya Narayana Padhi

Reputation: 7841

Help on QStackedWidget

I am using a QStackedWidget on my mainWindow. The firstPageWidget on stackedWidget contains 3 buttons. Now If I will press the first button on firstPage, I want the stackedWidget show the 2nd Page widget. Following are the details

I tried to connect like this in my mainwindow

connect(firstPageWidget->button1,SIGNAL(clicked()),stackWidget,SLOT(setCurrentIndex(int)));

Now I want to know how to pass the value of index number to stackWidget to set currentIndex?

If my question is not much clear please tell me I will explain more.

Upvotes: 3

Views: 2547

Answers (3)

chalup
chalup

Reputation: 8516

You probably need to use QSignalMapper class:

QSignalMapper mapper = new QSignalMapper(); // don't forget to set the proper parent
mapper->setMapping(firstPageWidget->button1, 2); // 2 can be replaced with any int value
connect(firstPageWidget->button1, SIGNAL(clicked()), mapper, SLOT(map()));
connect(mapper, SIGNAL(mapped(int)), stackWidget, SLOT(setCurrentIndex(int)));

Upvotes: 5

Kamil Klimek
Kamil Klimek

Reputation: 13130

You can also use QButtonGroup and set proper id to each button, then connect QButtonGroup signal QButtonGroup::buttonClicked(int) with stacked widget slot QStackedWidget::setCurrentIndex(int)

Upvotes: 0

Exa
Exa

Reputation: 4110

Instead of buttons you could use a QListWidget containing selectable Icons. QListWidget has a method called QListWidget::currentItemChanged ( QListWidgetItem * current, QListWidgetItem * previous ). I used that method in a program I wrote some time ago... There I wrote a function on_change_widget( QListWidgetItem *current, QListWidgetItem *previous ) which I connected to the SIGNAL currentItemChanged:

connect( my_list_widget,
         SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),
         this,
         SLOT(on_change_widget(QListWidgetItem *, QListWidgetItem *))
       );

That should do the trick.

You should have a look at the Config Dialog Example, there they use the same method to swap widgets.

Of course you can use normal buttons too, in connection with the QSignalMapper chalup mentioned.

Upvotes: 0

Related Questions