如何在不从当前活动选项卡中获取焦点的情况下将子窗口添加到 QMdiArea(设置为 TAB 模式)?

Posted

技术标签:

【中文标题】如何在不从当前活动选项卡中获取焦点的情况下将子窗口添加到 QMdiArea(设置为 TAB 模式)?【英文标题】:How to addSubWindow to a QMdiArea (set to TAB mode) without taking the focus from the currently active Tab? 【发布时间】:2013-01-28 15:05:11 【问题描述】:

我有一个在后台运行并在QMdiArea 中添加标签的函数。但是,当添加新选项卡时,它会从当前活动的选项卡中窃取焦点。有没有办法可以添加一个新的非活动选项卡(子窗口),以便将焦点保持在当前使用的选项卡上?

我在网上搜索过,但找不到与此问题相关的任何内容。

我尝试了以下方法:

MyWidget *widget=new MyWidget();
QMdiSubWindow *sub=ui->mdiArea->addSubWindow(widget,Qt::SubWindow);
sub->setWindowState(Qt::WindowNoState);

但它并没有达到预期的效果。

【问题讨论】:

【参考方案1】:

我在另一个论坛上得到了帮助并找到了解决该问题的方法:

QMdiSubWindow *previous = ui->mdiArea->activeSubWindow();
QTextEdit *edit=new QTextEdit;
QMdiSubWindow *sub=ui->mdiArea->addSubWindow(edit,Qt::Window)
sub->show();
if (previous==0)
   ui->mdiArea->setActiveSubWindow(sub);
else if (previous->isWidgetType()) //I check if previous is widget, because if you close the previous tab, when the new one is opened the program crashes on the next line because previous no longer exists.
   ui->mdiArea->setActiveSubWindow(previous);

【讨论】:

以上是关于如何在不从当前活动选项卡中获取焦点的情况下将子窗口添加到 QMdiArea(设置为 TAB 模式)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不丢失导航栏的情况下将子视图添加到 UINavigation 控制器?

如何在不从 DataFrame 转换并访问它的情况下将列添加到 Dataset?

如何在不丢失setfocus的情况下将光标设置到文本框的末尾?

如何在不使用共享首选项的情况下将数据存储为颤动的对象[关闭]

如何在不打开的情况下将数据发送到另一个活动

在onBackPressed之外的活动中获取当前片段?