У меня есть этот код, который делает окно mdi, написанное для Qt 4:
class MdiWindow : public QMainWindow
{
Q_OBJECT
public:
MdiWindow( QWidget *parent = nullptr)
...
private:
QWorkspace* workspace
QSignalMapper* mapper
}
MdiWindow::MdiWindow( QWidget *parent ) : QMainWindow( parent )
{
...
workspace = new QWorkspace;
setCentralWidget( workspace );
connect( workspace, SIGNAL(windowActivated(QWidget *)), this, SLOT(enableActions()));
mapper = new QSignalMapper( this );
connect( mapper, SIGNAL(mapped(QWidget*)), workspace, SLOT(setActiveWindow(QWidget*)) );
....
}
Согласно документации QT QWorkspace
следует заменить на QMdiArea
.
Я сделал это и написал первое соединение так:
connect(workspace, &QMdiArea::subWindowActivated,
this, &MdiWindow::enableActions);
Но как насчет QSignalMapper
и это тоже устарело?
Так как я могу обновить эту строку:
mapper = new QSignalMapper( this );
connect( mapper, SIGNAL(mapped(QWidget*)), workspace, SLOT(setActiveWindow(QWidget*)) );
Я прочитал QSignalMapper
можно заменить на лямды, но как в этом случае?
Если я правильно понял, mapper
перенаправляет все сигналы из этого в активное окно workspace