我有一个QMainWindow
和一个QDockWidget
嵌套在这个里面。
我展示了一些图表,所以QDockWidget
扩展但QMainWindow
保持它的初始大小,所以我必须使用我的鼠标调整它的大小。
那么,我怎样才能每次都QMainWindow
调整大小呢?QDockWidget
我有一个QMainWindow
和一个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
'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 插件插入。