我希望有一个"新标签"按钮,就像Chrome或Firefox一样QMdiArea.
我可以在某处创建一个按钮或菜单项,为MDI添加一个新的子文档,但是如何使它成为一个带有"+"标签的视觉上吸引人的小标签?或者,我会很满意QTabWidget这样一个按钮.
无关信息: 我正在尝试使用Qt构建应用程序.此应用程序具有QMdiArea和子窗口.我的儿童窗口将有一个菜单,可以集成到QMdiArea或隔离并附加到孩子本身.虽然,这比需要的更详细一点......
问题: 我希望我的子窗口小部件有一个带有快捷方式的菜单,"CTRL + W".但是,因为我使用的是QMdiArea,所以已使用快捷方式导致:
QAction :: eventFilter:模糊的快捷方式重载:Ctrl + W.
我怎样才能摆脱这个快捷方式并在我的子窗口小部件中声明它?
更新: 这是我没有运气的尝试:
class MDI : public QMdiArea
{
Q_OBJECT
private:
bool event(QEvent *tEvent)
{
if (tEvent->type() == QEvent::KeyPress)
{
QKeyEvent* ke = static_cast<QKeyEvent*>(tEvent);
if (ke->key()== Qt::Key_W && ke->modifiers() & Qt::ControlModifier)
emit KeyCW();
return true;
}
return QMdiArea::event(tEvent);
}
public:
signals:
void KeyCW();
};
Run Code Online (Sandbox Code Playgroud)
这工作,如果我做的改变简单的东西Qt::Key_W来 Qt::Key_L.的关键,组合体被接收的事件被抛出.有了W,它就永远不会发生.我也尝试过移动event到QMainWindow以及子窗口中的eventFilter到QMdiArea.似乎做一些简单的事情就像从QMdiArea中删除默认的键处理程序一样简单.
我看到它QMdiArea具有选项卡式查看模式。我希望能够用两个QMdiArea小部件拆分主窗口,并能够在每个小部件之间拖放标签。我已经完成了一个简单的QTabWidget设置自定义标签栏的操作。同时,我想切换QMdiArea视图模式,因此QTabWidget对我来说不是使用选项。但是我看不到任何方法来设置中的自定义标签栏QMdiArea。我仍然希望可以做到。有人可以建议吗?
经过一段时间的研究,我可以建议以下解决方案。您必须继承一个新类QMdiArea。设置其查看模式以TabbedView使标准QTabBar建筑在中构建QMdiArea。然后让所有孩子找到并使用来找到QTabBar小部件QString(QObject::metaObject()->className()) == "QTabBar"。把它藏起来。在TabbedView模式下,您将在文档上方获得空白区域。构造您的自定义标签栏并将其重新添加到自定义MDI区域。连接激活子窗口和选项卡时触发并使用的信号和插槽。您可以将自定义标签栏作为自定义mdi区域的班级成员。
如果您发现此帖子有用,请对其进行投票。谢谢。
例如一些代码。
QTabBar在其构造函数的自定义mdi区域中查找标准字体:
m_pMdiAreaTabBar = NULL;
m_pMdiArea->setViewMode(QMdiArea::TabbedView);
QObjectList listChildren = m_pMdiArea->children();
for (QObjectList::Iterator i = listChildren.begin(); i != listChildren.end(); ++i)
{
if (QString((*i)->metaObject()->className()) == "QTabBar")
{
m_pMdiAreaTabBar = dynamic_cast<QTabBar*>(*i);
break;
}
}
Run Code Online (Sandbox Code Playgroud)上级:
m_pTabBar->setParent(m_pMdiArea);
Run Code Online (Sandbox Code Playgroud)隐藏:
if (m_pMdiAreaTabBar != 0) m_pMdiAreaTabBar->hide();
Run Code Online (Sandbox Code Playgroud)使用的信号和插槽:QMdiArea::subWindowActivated(QMdiSubWindow*),QTabBar::currentChanged(int)
Qt开发人员!有没有办法在我的midArea的背景上添加图像,如下图所示?

我知道我可以使用这样的东西
QImage img("logo.jpg");
mdiArea->setBackground(img);
Run Code Online (Sandbox Code Playgroud)
但我不需要在背景上重复我的图像.
谢谢!