我嵌套了QMainWindow
和QDockWidget
。
我展示了一些图表,因此QDockWidget
会展开,但QMainWindow
会保持初始尺寸,所以我必须使用鼠标调整它的大小。
那么,我怎样才能每次QMainWindow
调整大小为QDockWidget
?
答案 0 :(得分:1)
最后很容易。
我接受了Qsize
的{{1}},我将QDockWidgets
调整为此值。
例如,我有2个QDockWidget并排,所以我做的是
QMainWIndow
答案 1 :(得分: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插件插入。