0

この中に aQMainWindowと a が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の 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 に答える