我有这段代码,它为 Qt 4 编写了一个 mdi 窗口:
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的可以用 lamdas 代替,但在这种情况下怎么办?如果我理解正确mapper,则将所有信号从这里转发到活动窗口workspace