Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QtQWidget::setGeomerty_C++_Qt - Fatal编程技术网

C++ QtQWidget::setGeomerty

C++ QtQWidget::setGeomerty,c++,qt,C++,Qt,我被一个简单的Qt函数卡住了,这个函数对我不起作用 从QMainWindow和从QWidget继承的另一个类。然后,我从第二个类在第一个类中创建了一个成员对象(指向的指针),并在构建窗口期间将其指定为其中心Widget 当使用函数QWidget::setGeomerty()调整窗口内的centraWidget时,它根本不起作用。以下是我的代码: void MainWindow::show() { //some code that centers my window on the scr

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

当使用函数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内置布局,然后将小部件添加到布局中,您可以实现您想要的;我认为不可能直接将中央部件交给它,并尝试移动/调整其大小;但通过添加布局和子小部件,我们可以处理它们。以下是我的代码:

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();

}
mainwindow.cpp

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

主窗口::主窗口(QWidget*父窗口):
QMainWindow(父窗口),
m_MainView(新MainView(本)),
m_WindowLayout(新的MainWindLayout(NULL))//我的自定义布局刚刚从QGridLayout继承

{

/。。。。。。。。。。。。。
setCentralWidget(m_MainView);
m_WindowLayout=new MainWindLayout(m_MainView);//我的布局设置到我的中心小部件“m_MainView”中。
QWidget*temp(dynamic_cast(m_MainView->centralView());//centralView()返回我的中心小部件的子QWidget
QMargins边距(this->width()/5,0,this->width()/5,0);//设置布局边距:左、上、右、下;正是我需要的
m_WindowLayout->setContentsMargins(边距);
m_WindowLayout->addWidget(temp,0,0,-1,-1);//将我的子窗口小部件添加到布局,填充gridlayout的所有单元格。
}


谢谢大家

我想通常你会在
main window
上调用
setGeometry
。你知道如何调整主窗口中cantralwidget的大小吗?我只是尝试了Move()和resize()而不是setGeometry(),但它不起作用。添加布局?我想我正按照你说的做。谢谢。以下是我的新代码和最终代码: