Переопределение сигналов Qt

Только начал изучать библиотеку Qt и столкнулся с проблемой. В книге Шлее есть раздел по переопределению сигналов и я хочу разобраться с этим, но там приведен пример только реализации класса MyClass, а функции main - к сожалению нет. Я попытался написать ее самостоятельно, но явно что-то делаю не так. Может быть необходимо как-то связать с помощью сигнально-слотовой связи класс MyClass с окном либо с каким-то виджетом? А может необходимо добавить какие-то сигналы, посылающие строку? Буду очень благодарен за помощь и объяснения.

MyClass.h

#ifndef MYCLASS_H
#define MYCLASS_H
 
#include <QObject>
#include <QWidget>
#include <QSignalMapper>
#include <QDebug>
#include <QPushButton>
 
class MyClass : public QWidget
{
    Q_OBJECT
public:
    MyClass();
 
public slots:
    void slotShowAction(const QString& str);
};
 
#endif // MYCLASS_H



MyClass.cpp

#include "myclass.h"
 
MyClass::MyClass()
{
    QSignalMapper* psigMapper = new QSignalMapper(this);
    connect(psigMapper, SIGNAL(mapped(const QString&)), this, SLOT(slotShowAction(QString)));
 
    QPushButton* pcmd1 = new QPushButton("Button1");
    connect(pcmd1, SIGNAL(clicked()), psigMapper, SLOT(map()));
    psigMapper->setMapping(pcmd1, "Button1 Action");
 
    QPushButton* pcmd2 = new QPushButton("Button2");
    connect(pcmd2, SIGNAL(clicked()), psigMapper, SLOT(map()));
    psigMapper->setMapping(pcmd2, "Button2 Action");
}
 
void MyClass::slotShowAction(const QString &str)
{
    qDebug() << str;
}



main.cpp

#include "myclass.h"
#include <QApplication>
 
int main(int argc, char** argv)
{
    QApplication app(argc, argv);
 
    MyClass* obj = new MyClass();
 
    delete obj;
 
    return app.exec();
}```

Ответы (1 шт):

Автор решения: Eugeny Shtanov

MyClass.cpp:

MyClass::MyClass()
{
    ...

    QHBoxLayout *lay = new QHBoxLayout(this);
    lay->addWidget(pcmd1);
    lay->addWidget(pcmd2);
    setLayout(lay);
}

main.cpp:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyClass w;
    w.show();
    return a.exec();
}

введите сюда описание изображения

Вывод приложения:

"Button1 Action"
"Button2 Action"
"Button1 Action"
"Button2 Action"

PS: я QSignalMapper редко использую. Рекомендую брать примеры из поддиректории Examples в директории, куда Вы установили Qt.

→ Ссылка