可以使用QMdiSubWindow类的activateWindow()函数来实现。
如果是想通过标签切换来控制QMdiArea中的子窗口显示,可以使用QTabWidget作为QMdiSubWindow的标题部分。具体操作步骤如下:
- 在QMdiSubWindow的构造函数中设置标题部分为QTabWidget,并将子窗口添加到其中:
MyMdiSubWindow::MyMdiSubWindow(QWidget *parent) : QMdiSubWindow(parent)
{
QTabWidget *tabWidget = new QTabWidget(this);
this->setWidget(tabWidget);
// 添加子窗口到tabWidget中
QWidget *subWidget1 = new QWidget();
tabWidget->addTab(subWidget1, "SubWindow1");
QWidget *subWidget2 = new QWidget();
tabWidget->addTab(subWidget2, "SubWindow2");
}
此处创建了一个继承自QMdiSubWindow的自定义类MyMdiSubWindow。在构造函数中,首先创建一个QTabWidget对象,并将其设置为子窗口的标题部分。然后将需要显示在QMdiArea中的QWidget对象(这里分别用subWidget1和subWidget2代替)添加到QTabWidget中。
- 在QTabWidget的currentChanged()信号中获取当前选中的子窗口,并激活该子窗口:
QObject::connect(tabWidget, &QTabWidget::currentChanged, [=](int index){
QWidget *subWidget = tabWidget->widget(index);
QMdiSubWindow *subWindow = qobject_cast<QMdiSubWindow*>(subWidget->parent());
if(subWindow) {
subWindow->activateWindow();
}
});
此处通过连接QTabWidget的currentChanged()信号,并在lambda函数中获取当前选中的QWidget对象(即子窗口),然后使用qobject_cast将其转换为QMdiSubWindow对象。最后调用activateWindow()函数激活该子窗口。
需要注意的是,在QMdiArea中添加子窗口时,需要使用addSubWindow()函数来添加。例如:
MyMdiSubWindow *subWindow = new MyMdiSubWindow();
mdiArea->addSubWindow(subWindow);
subWindow->show();
其中,MyMdiSubWindow是自定义的继承自QMdiSubWindow的类。在构造完这个子窗口之后,使用addSubWindow()函数将其添加到QMdiArea中,最后调用show()函数显示出来。