0

我有一个QMainWindow和一个QDockWidget嵌套在这个里面。

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

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

4

2 回答 2

1

最后很容易。

我接受Qsize我的QDockWidgets,我调整我QMainWIndow的大小。

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

QSize siz =  Dock->size();
QSize siz2 =  Dock2->size();
resize(siz.width()+siz2.width(),siz.height);
于 2014-08-26T13:32:45.047 回答
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's 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 插件插入。

于 2014-08-26T13:20:52.433 回答