首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >力QDockWidget阶

力QDockWidget阶
EN

Stack Overflow用户
提问于 2016-09-28 07:47:20
回答 1查看 805关注 0票数 0

我们使用Qt5开发了一个可移植的应用程序,我目前正在寻找一种在码头区域强制执行多个QDockWidgets顺序的方法。例如,对于两个可停靠的小部件A和B,我希望有以下行为:

  • A可以浮动,也可以停靠在左边。
  • B可以是浮动的,也可以停靠在左边,但在A的右边

我希望保持排序:如果小部件B被用户取消停靠并重新停靠,它只能发生在小部件A的右侧。

有可能吗?我找不到任何关于这类特征的参考资料。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-28 09:59:34

AFAIK没有此特性。你必须用信号来处理码头的重新排列。下面是一个简单的示例:

代码语言:javascript
复制
#include <QtCore>
#include <QtGui>
#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QMainWindow mainWindow;
    mainWindow.setCentralWidget(new QLabel("<B>I am a<BR>central widget.</B>"));
    QDockWidget dock1("Dock1");
    dock1.setWidget(new QLabel("Content1"));
    QDockWidget dock2("Dock2");
    dock2.setWidget(new QLabel("Content2"));
    dock2.setAllowedAreas(Qt::LeftDockWidgetArea);

    const auto relocateDock1 = [&] (Qt::DockWidgetArea newArea) {
        if (dock1.isFloating())
            return;

        if (newArea == Qt::LeftDockWidgetArea) {
            // Dock is tabified before user drops it. See also
            // QMainWindow::splitDockWidget notes in documentation.
            if (!mainWindow.tabifiedDockWidgets(&dock2).isEmpty())
                mainWindow.addDockWidget(Qt::LeftDockWidgetArea, &dock2);
            mainWindow.splitDockWidget(&dock1, &dock2, Qt::Horizontal);
        }
    };
    const auto relocateDock2 = [&] (bool topLevel) {
        if (topLevel)
            return;

        if (mainWindow.dockWidgetArea(&dock1) == Qt::LeftDockWidgetArea) {
            mainWindow.splitDockWidget(&dock1, &dock2, Qt::Horizontal);
        }
    };
    QObject::connect(&dock1, &QDockWidget::dockLocationChanged, relocateDock1);
    QObject::connect(&dock2, &QDockWidget::topLevelChanged, relocateDock2);

    mainWindow.addDockWidget(Qt::LeftDockWidgetArea, &dock1);
    mainWindow.addDockWidget(Qt::LeftDockWidgetArea, &dock2);
    relocateDock2(false);

    mainWindow.show();

    return app.exec();
}

这条路看上去很难看,而且充满了各种变通方法。但我不知道有什么更好的方法。

我花了很多时间去做这件事,我的建议是放弃这个想法。也许在一个码头上有一个两列的小部件比较容易呢?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39741157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档