c++ qt 自定义树模型 双击视图中的某一项(mdiarea中的某个子窗口指针)后 将选中的子窗口变为mdiarea控件的活动窗口
时间: 2024-02-12 17:02:33 浏览: 138
如果您想在双击树模型的某一项后将选中的子窗口变为mdiarea控件的活动窗口,可以使用QAbstractItemView中的doubleClicked()信号结合QStandardItemModel和QMdiArea来实现。以下是一个示例:
```c++
connect(myTreeView, &QTreeView::doubleClicked, this, [=](const QModelIndex &index){
QStandardItemModel *model = qobject_cast<QStandardItemModel*>(myTreeView->model());
QStandardItem *item = model->itemFromIndex(index);
QWidget *widget = item->data(Qt::UserRole).value<QWidget*>();
if(widget) {
QMdiSubWindow *subWindow = mdiArea->findChild<QMdiSubWindow*>(widget->objectName());
if(subWindow) {
subWindow->setFocus();
}
}
});
```
在上面的示例中,我们连接了QTreeView的doubleClicked()信号,当用户在视图中双击某一项时,将会调用一个lambda表达式。在此表达式中,我们首先获取QStandardItemModel和QStandardItem,然后获取存储在树模型中的QWidget指针。接下来,我们使用QWidget的objectName()函数查找QMdiSubWindow,并将其设置为活动窗口。
请注意,这需要在将QWidget指针存储到树模型时将其命名为与QMdiSubWindow的objectName属性相同。例如:
```c++
QStandardItem *item = new QStandardItem("My Widget");
item->setData(QVariant::fromValue<QWidget*>(widget), Qt::UserRole);
item->setEditable(false);
item->setToolTip("Double click to select");
item->setObjectName(widget->objectName());
```
在上面的示例中,我们使用了QWidget的objectName()函数作为QStandardItem的对象名称,并使用setData()函数将QWidget指针存储到树模型中。这使得我们可以轻松地使用findChild()函数查找QMdiSubWindow。
阅读全文