Regarding QTabWidget and QSignalMapper
-
hello all, i want to fire a command which is a QString when a particular tab is selected using QSignalMapper depending on the tab_index i have selected.
@
connect(tab_widget, SIGNAL(currentChanged(int)), signal_mapper, SLOT(map()));
@
This doesn't work for me as map() slot don't take any arguments.
Please help me with the same or show me other way round to do this stuff. -
QSignapMapper is not the class you are looking for. QTabWidget already has a signal that contains an index for the selected tab. You can use that to make a mapping to a string yourself. Simply use a QStringList to store the strings, and lookup the corresponding string for each index, and then re-emit the signal with the string.
-
thanks andre for your suggestion but i want to make it work according to my design::-
i want to store the strings as a property for each child widgets of QTabWidget by using setProperty() in a function set_command() where i pass qtabwidget, index of tab, string as an argument.
So that when currentChanged() signal is emitted, it inquires the property of its current active widget and fires command.
Also i dont want to store the strings as member variable in QStringList.
Please do suggest, how to use signal slot in this case. -
That was not the design you described in your first post, but ok. It is still simple. You can indeed also store the strings as a property in the tab widgets themselves. I think I would do something like this:
@
//headerclass MyTabWidget: public QTabWidget {
Q_OBJECTpublic:
MyTabWidget(QWidget* parent=0);signals:
void currentChanged(QString);private slots:
void onCurrentChanged(int index);
}// implementation
MyTabWidget::MyTabWidget(QWidget* parent):
QTabWidget(parent)
{
connect(this, SIGNAL(currentChanged(int)), this, SLOT(onCurrentChanged(int)));
}void MyTabWidget::onCurrentChanged(int index)
{
QWidget* w = widget(index);
if (w) {
QString s = w->property("theStringProperty").toString();
if (!s.isEmpty()) emit currentChanged(s);
}
}
@This should (not tested, brain to forum) emit a currentChanged(QString) signal if they have a QString property theStringProperty set.
-
thanks Andre, it really helped me.
sorry for not posting details previous only.