我有一个QMainWindow和一个嵌套在里面的QDockWidget。
我展示了一些图表,所以QDockWidget扩展了,但是QMainWindow保持了它的初始大小,所以我必须用鼠标调整它的大小。
那么,如何使QMainWindow每次调整为QDockWidget大小?
发布于 2014-08-26 13:32:45
最后很简单。
我拿我的Qsize of我的QDockWidgets,我调整了我的QMainWIndow的尺寸到这个。
例如,我有两个QDockWidget并排,所以我所做的是
QSize siz = Dock->size();
QSize siz2 = Dock2->size();
resize(siz.width()+siz2.width(),siz.height);发布于 2014-08-26 13:20:52
您可能希望重写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.
}Disadvantage:
您需要手动(以编程方式)设置QDockWidget的属性,除非您管理自己,将您的自定义小部件插入为QTDesigner插件。
https://stackoverflow.com/questions/25505041
复制相似问题