【问题标题】:QDockWidget initial widthQDockWidget 初始宽度
【发布时间】:2010-09-16 12:03:30
【问题描述】:

如何设置 QDockWidget 的初始宽度?

我已经实现了 sizeHint 函数,但是接下来呢?

【问题讨论】:

    标签: c++ qt qdockwidget


    【解决方案1】:

    QDockWidget 的文档说:

    QDockWidget 充​​当其子部件的包装器,由 setWidget() 设置。自定义尺寸提示、最小和最大尺寸以及尺寸策略应在子小部件中实现。 QDockWidget 将尊重它们,调整自己的约束以包括框架和标题。 不应在 QDockWidget 本身上设置大小约束,因为它们会根据它是否停靠而改变;停靠的 QDockWidget 没有框架和较小的标题栏。

    因此,大小提示取自您在停靠小部件中放置的任何内容。你试过设置QDockWidget的孩子的大小吗?

    但是,我同意 Marius 的观点,最好的办法可能是在应用程序启动时使用QSettings 来保存和恢复所有停靠窗口的宽度。看看QMainWindow::saveState 除了从saveState 而不是从单个函数中获取数据之外,我的保存函数看起来与 Marius 给出的非常相似。

    【讨论】:

      【解决方案2】:

      如果您希望它具有与上次程序运行时相同的宽度,您应该查看设置。 Qt 4.4 文档中有一个关于如何使用设置here 的示例。

      这就是我的做法:

      void Applicotion::readSettings() {
        QSettings settings("Company Name", "Application Name");
        settings.beginGroup("LibraryDock");
        libraryDock->setFloating(settings.value("docked").toBool());
        libraryDock->resize(settings.value("size", QSize(1, 1)).toSize());
        libraryDock->move(settings.value("pos", QPoint(200, 200)).toPoint());
        addDockWidget((Qt::DockWidgetArea)settings.value("dockarea", Qt::RightDockWidgetArea).toInt(), libraryDock);
        settings.endGroup();
      }
      
      void Applicotion::writeSettings() {
        QSettings settings("Company Name", "Application Name");
        settings.beginGroup("LibraryDock");
        settings.setValue("dockarea", dockWidgetArea(libraryDock));
        settings.setValue("docked", libraryDock->isFloating());
        settings.setValue("size", libraryDock->size());
        settings.setValue("pos", libraryDock->pos());
        settings.endGroup();
      

      }

      【讨论】:

      • 如果您使用 QMainWindow 来保存停靠窗口,则使用 saveState 和 restoreState 会更容易,它可以保存所有停靠窗口小部件和工具栏的状态
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-25
      • 1970-01-01
      • 2011-04-16
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多