调整QMainwindow的大小以适应Qdockwidget的大小

时间:2014-08-26 11:44:12

标签: c++ css qt qmainwindow qdockwidget

我嵌套了QMainWindowQDockWidget

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

那么,我怎样才能每次QMainWindow调整大小为QDockWidget

2 个答案:

答案 0 :(得分:1)

最后很容易。

我接受了Qsize的{​​{1}},我将QDockWidgets调整为此值。

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

QMainWIndow

答案 1 :(得分:0)

您可能想要重写resizeEvent小部件的QDockWidget功能。为此,您需要继承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插件插入。