Переопределение сигналов 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 шт):
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.
