signalMapper
-
I have been looking docs and other topics about singalMappers but I still couldn't make it work properly.
here is the function I want to call
void theme(QString a)
{qDebug()<<a;
}
here is how I connected
for (int a=0;a<buttons.count();a++){
QPushButton *button = new QPushButton();QSignalMapper *signalMapper = new QSignalMapper(); connect(signalMapper, SIGNAL(mapped(QString)), this, SIGNAL(theme(QString))); connect(button, SIGNAL(clicked()), signalMapper,SLOT(map())); signalMapper->setMapping(button,button->text());
here is the header file
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{
Q_OBJECTpublic:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
signals:
void theme(QString a);private slots:
void on_pushButton_clicked();void on_pushButton_10_clicked(); void on_temalar_button_clicked();
public:
Ui::MainWindow *ui;
};#endif // MAINWINDOW_H
But when I click the button, I don't get any debug output. What is the thing that I'm doing wrongly?
Thanks -
Hi!
I think thatconnect(signalMapper, SIGNAL(mapped(QString)), this, SIGNAL(theme(QString)));
should be
connect(signalMapper, SIGNAL(mapped(QString)), this, SLOT(theme(QString)));
-
@Wieland
I did but it is still not working.
I put theme from signals: to slots: in header file. And did what you said, now I'm having this:/home/metin/QTProjects/build-settings-Desktop_Qt_5_5_1_GCC_64bit-Debug/moc_mainwindow.cpp:82: error: undefined reference to `MainWindow::theme(QString)'
-
Hi and welcome to devnet,
MainWindow's
theme
is a signal so basically your initial connect line was correct from that perspective. However, yourtheme
function is just a static function somewhere.If you want it to be called, you should make theme a slot, and add the missing
MainWindow::
between void and theme and keep the new version of the connect statement.