标签: qmdiarea

如何在选项卡式视图模式下在QMdiArea的选项卡旁边添加"新选项卡"按钮?

我希望有一个"新标签"按钮,就像Chrome或Firefox一样QMdiArea.

我可以在某处创建一个按钮或菜单项,为MDI添加一个新的子文档,但是如何使它成为一个带有"+"标签的视觉上吸引人的小标签?或者,我会很满意QTabWidget这样一个按钮.

qt tabs qtabwidget qmdiarea

15
推荐指数
3
解决办法
8848
查看次数

Qt - 删除快捷方式 - 不明确的快捷方式重载

无关信息: 我正在尝试使用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_WQt::Key_L.的关键,组合体被接收的事件被抛出.有了W,它就永远不会发生.我也尝试过移动event到QMainWindow以及子窗口中的eventFilter到QMdiArea.似乎做一些简单的事情就像从QMdiArea中删除默认的键处理程序一样简单.

c++ qt qmdiarea

5
推荐指数
1
解决办法
4384
查看次数

将自定义选项卡栏与QMdiArea一起使用

我看到它QMdiArea具有选项卡式查看模式。我希望能够用两个QMdiArea小部件拆分主窗口,并能够在每个小部件之间拖放标签。我已经完成了一个简单的QTabWidget设置自定义标签栏的操作。同时,我想切换QMdiArea视图模式,因此QTabWidget对我来说不是使用选项。但是我看不到任何方法来设置中的自定义标签栏QMdiArea。我仍然希望可以做到。有人可以建议吗?

经过测试的Qt 4.8解决方案(编辑)

经过一段时间的研究,我可以建议以下解决方案。您必须继承一个新类QMdiArea。设置其查看模式以TabbedView使标准QTabBar建筑在中构建QMdiArea。然后让所有孩子找到并使用来找到QTabBar小部件QString(QObject::metaObject()->className()) == "QTabBar"。把它藏起来。在TabbedView模式下,您将在文档上方获得空白区域。构造您的自定义标签栏并将其重新添加到自定义MDI区域。连接激活子窗口和选项卡时触发并使用的信号和插槽。您可以将自定义标签栏作为自定义mdi区域的班级成员。

如果您发现此帖子有用,请对其进行投票。谢谢。

例如一些代码。

  1. 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)
  2. 上级:

    m_pTabBar->setParent(m_pMdiArea);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 隐藏:

    if (m_pMdiAreaTabBar != 0) m_pMdiAreaTabBar->hide();
    
    Run Code Online (Sandbox Code Playgroud)
  4. 使用的信号和插槽:QMdiArea::subWindowActivated(QMdiSubWindow*)QTabBar::currentChanged(int)

c++ qt tabs qt4 qmdiarea

5
推荐指数
0
解决办法
2955
查看次数

关于Qt QMdiArea背景的图片

Qt开发人员!有没有办法在我的midArea的背景上添加图像,如下图所示?

在此输入图像描述

我知道我可以使用这样的东西

QImage img("logo.jpg");
mdiArea->setBackground(img);
Run Code Online (Sandbox Code Playgroud)

但我不需要在背景上重复我的图像.

谢谢!

qt image qt4 qmdiarea

2
推荐指数
1
解决办法
2081
查看次数

标签 统计

qmdiarea ×4

qt ×4

c++ ×2

qt4 ×2

tabs ×2

image ×1

qtabwidget ×1