Nominate our 2022 Qt Champions!


  • 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)



    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()));

    here is the header file

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include <QMainWindow>

    namespace Ui {
    class MainWindow;

    class MainWindow : public QMainWindow

    explicit MainWindow(QWidget *parent = 0);
    void theme(QString a);

    private slots:
    void on_pushButton_clicked();

    void on_pushButton_10_clicked();
    void on_temalar_button_clicked();

    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?

  • Hi!
    I think that

    connect(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)'

  • @Nirvana You probably need to clean your project and run qmake again.

  • Lifetime Qt Champion

    Hi and welcome to devnet,

    MainWindow's theme is a signal so basically your initial connect line was correct from that perspective. However, your theme 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.

Log in to reply