【问题标题】:Resize QMainwindow to fit Qdockwidget size调整 QMainwindow 的大小以适应 Qdockwidget 的大小
【发布时间】:2014-08-26 11:44:11
【问题描述】:

我有一个 QMainWindow 和一个 QDockWidget 嵌套在其中。

我展示了一些图表,所以QDockWidget 会扩展,但QMainWindow 保持它的初始大小,所以我必须使用鼠标调整它的大小。

那么,我如何每次都将QMainWindow 调整为QDockWidget 的大小?

【问题讨论】:

  • 如果您需要将主窗口的大小调整为包含停靠窗口的大小,为什么还需要停靠窗口?
  • 我有 2 个并排的扩展坞,一个扩展。我需要将所有窗口扩展到这个大小,特别是它的高度。

标签: c++ css qt qmainwindow qdockwidget


【解决方案1】:

最后很简单。

我将QDockWidgets 中的Qsize 调整为QMainWIndow 的大小。

例如,我有 2 个 QDockWidget 并排,所以我要做的是

QSize siz =  Dock->size();
QSize siz2 =  Dock2->size();
resize(siz.width()+siz2.width(),siz.height);

【讨论】:

    【解决方案2】:

    您可能想要重写QDockWidget 小部件的resizeEvent 函数。为此,您需要继承 QDockWidget

    class MYDockwidget : public QDockWidget
    {
        Q_OBJECT
    public:
        MYDockwidget(QWidget *parent = 0):
        QDockWidget(parent)
        {}
    
    protected:
        void resizeEvent(QResizeEvent *event)
        {
            QDockWidget::resizeEvent(event);
            // Calulate Main window size here.
            // the main window is accesible
            // through the parent property.
        }
    };
    

    这种方法有效,但将QDockWidget 的resizeEvent 绑定到QMainWindow。正确的解决方案是在QDockWidget 的大小发生变化时发出信号。

    为此,您需要定义一个自定义信号,当然您希望该信号包含有关事件的信息,因此我们的信号将使用QSize 参数发出。

    class MYDockwidget : public QDockWidget
    {
        Q_OBJECT
    
    public:
        MYDockwidget(QWidget *parent = 0):
        QDockWidget(parent)
        {}
    
    signals:
        void sizeChanged(QSize);
    protected:
        void resizeEvent(QResizeEvent *event)
        {
            QDockWidget::resizeEvent(event);
            emit sizeChanged(event->size());
        }
    };
    

    之后你可以编写如下代码:

    // Inside your main window.
    public slots:
        void on_dock_size_changed(QSize)    
    
    MYDockwidget *dock = new MYDockwidget(this);
    connect(dock, SIGNAL(sizeChanged(QSize)), this, SLOT(on_dock_size_changed(QSize)));
    
    void on_dock_size_changed(QSize size)
    {
        // resize your main window here.
    }
    

    缺点:

    您需要手动(以编程方式)设置QDockWidget 的属性,除非您自行管理以将自定义小部件作为 QTDesigner 插件插入。

    【讨论】:

      猜你喜欢
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      • 2020-11-30
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 1970-01-01
      相关资源
      最近更新 更多