Измените размер QMainwindow, чтобы он соответствовал размеру Qdockwidget

у меня есть QMainWindow и QDockWidget вложенный в это.

Я показываю некоторые графики, поэтому QDockWidget расширяется но QMainWindow сохраняет его первоначальный размер, поэтому я должен изменить его размер с помощью мыши.

Итак, как я могу сделать QMainWindow изменить размер до QDockWidget размер каждый раз?

0

Решение

Это было легко в конце.

я возьму Qsize из моего QDockWidgets и я изменяю размеры QMainWIndow к этому.

Например, у меня есть 2 QDockWidget рядом, так что я делаю

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

Другие решения

Вы можете переписать 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.
}
};

Этот подход работает, но связывает QDockWidgetResizeEvent для 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.

0

По вопросам рекламы [email protected]