この中に aQMainWindow
と a がQDockWidget
ネストされています。
いくつかのグラフを表示すると、QDockWidget
拡大されますが、QMainWindow
初期サイズが維持されるため、マウスを使用してサイズを変更する必要があります。
では、毎回QMainWindow
サイズを変更するにはどうすればよいですか?QDockWidget
この中に aQMainWindow
と a がQDockWidget
ネストされています。
いくつかのグラフを表示すると、QDockWidget
拡大されますが、QMainWindow
初期サイズが維持されるため、マウスを使用してサイズを変更する必要があります。
では、毎回QMainWindow
サイズを変更するにはどうすればよいですか?QDockWidget
最後は簡単でした。
Qsize
私は自分のを取り、これにQDockWidgets
サイズを変更QMainWIndow
します。
たとえば、私は2つの QDockWidget を並べて持っているので、私がしていることは
QSize siz = Dock->size();
QSize siz2 = Dock2->size();
resize(siz.width()+siz2.width(),siz.height);
ウィジェットの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 プラグインとして挿入するように自分自身を管理しない限り、 のプロパティを手動で (プログラムによって)設定する必要があります。