Qt QWidget::setGeomerty

Qt QWidget::setGeomerty

本文关键字:setGeomerty QWidget Qt      更新时间:2023-10-16

我被一个简单的Qt函数困住了,它对我不起作用。从QMainWindow和另一个继承自QWidget的类,然后我从第二个类中创建了一个成员对象(指针),并在构建窗口期间将其分配为其centralWidget。

当涉及到使用函数QWidget::setGeomerty()在窗口中调整我的centraWidget时,它根本不起作用。

void MainWindow::show() 
{
   //some code that centers my window on the screen
   int margin=this->width()/7;
   centralWidget()->setGeometry(margin,centralWidget()->geometry().top(),this->width()-margin,centralWidget()->geometry().bottom());
   QMainWindow::show();
}

我知道这可能很愚蠢,但我就是想不通。

QMainWindow有自己的布局,其中中心区域被中央小部件占据。因此,打破该布局并任意修改中央小部件的大小/位置并不是很简单。我建议使用占位符中央小部件并将您的小部件添加为子小部件。我很确定您可以通过为"占位符"中央小部件设置适当的内置 Qt 布局,然后将您的小部件添加到布局中来实现您想要的。

布局

对于管理我想要的东西是必要的;我认为不可能直接交出中央小部件并尝试移动/调整它的大小;但是通过添加布局和子小部件,我们可以处理它们。

主窗口.cpp

我专注于我的窗口构造函数

主窗口:

:主窗口(QWidget *parent) :
QMainWindow(parent),
m_MainView(新主视图(this)),
m_WindowLayout(new MainWindLayout(NULL))//my 自定义布局女巫只是继承自 QGridLayout

{

//.............
setCentralWidget(m_MainView);
m_WindowLayout=new MainWindLayout(m_MainView);//my layout set into my central Widget"m_MainView".
QWidget *temp(dynamic_cast<QWidget *>(m_MainView->centralView()));//centralView() returns a child QWidget of my central Widget 
QMargins margins(this->width()/5,0,this->width()/5,0);//setting up layout margins :left,top,right,bottom;exactly what i need
m_WindowLayout->setContentsMargins( margins);
m_WindowLayout->addWidget(temp,0,0,-1,-1);//adding my child widget to the layout filling all cells of the gridlayout.

}

谢谢大家