写作网站可以签约未成年吗,网址大全怎么删除,网店推广的作用,上海 专业网站建设默认尺寸
对于一个Qt的窗口#xff08;继承于QWidget#xff09;#xff0c;获取其窗体尺寸的方法size()#xff1b;
以一个Qt创建Qt Widgets Application项目的默认生成代码为基础#xff0c;做如下测试
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent…默认尺寸
对于一个Qt的窗口继承于QWidget获取其窗体尺寸的方法size()
以一个Qt创建Qt Widgets Application项目的默认生成代码为基础做如下测试
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{qDebug()MainWindow::MainWindow:this-size();this-resize(1200,800);qDebug()MainWindow::MainWindow:this-size();
}
第一个this-size()输出QSize(640, 480)即MainWindow具有默认的尺寸640*480
第二个this-size()输出QSize(1200, 800)
实际上继承于QWidget的控件例如QPushButtonQLineEdit等也会获得默认的尺寸640*480 QWidget* pagenew QWidget;qDebug()..page-size();QPushButton* btnnew QPushButton;qDebug()..btn-size();QLineEdit* edtnew QLineEdit;qDebug()..edt-size();
以上输出都是QSize(640, 480)
布局之后的尺寸
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{qDebug()MainWindow::MainWindow:this-size();this-resize(1200,800);QWidget* pagenew QWidget;qDebug()..page-size();QVBoxLayout* layoutnew QVBoxLayout(page);QPushButton* btnnew QPushButton;qDebug()..btn-size();QLineEdit* edtnew QLineEdit;qDebug()..edt-size();layout-addWidget(btn);layout-addWidget(edt);this-setCentralWidget(page);qDebug()..page-size();qDebug()..btn-size();qDebug()..edt-size();qDebug()MainWindow::MainWindow:this-size();//当界面显示出来之后点击按钮查看控件尺寸connect(btn,QPushButton::clicked,[]{qDebug()..page-size();qDebug()..btn-size();qDebug()..edt-size();});
}
以上代码this-setCentralWidget(page);之后的三个打印对应的尺寸应该是多少
依然还是 QSize(640, 480)
而connect()方法中的三个打印对应的值则分别为
.. QSize(1200, 800) .. QSize(1178, 28) .. QSize(1178, 24)
以上代码说明两个问题
1将控件加入到布局然后放入了父窗体中则控件的尺寸会根据父窗体的布局重新设置
2控件尺寸的重新设置发生在窗体显示出来后绘制时 固定尺寸 以下代码实现在主窗体上布局多个按钮和子窗体实现点击按钮切换每个子窗体的隐藏和可见。
但是存在问题
14个子窗体平分了主窗体的尺寸
2隐藏一个子窗体后其他的子窗体尺寸被更改窗体重绘时会重新设置尺寸
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{qDebug()MainWindow::MainWindow:this-size();this-resize(1200,800);QWidget* pagenew QWidget;QVBoxLayout* layoutnew QVBoxLayout(page);QScrollArea* contentAreanew QScrollArea;contentArea-setWidgetResizable(true);contentArea-setWidget(page);for(int i0;i4;i){QWidget* pnew QWidget;//设置窗体背景色使得区分背景可见p-setStyleSheet(background-color:green);QPushButton* bnew QPushButton;layout-addWidget(b);layout-addWidget(p);connect(b,QPushButton::clicked,[p]{//点击按钮后窗体切换显示和隐藏效果p-setVisible(!p-isVisible());});}this-setCentralWidget(contentArea);
}如果需要设置子窗体在重绘时不改变尺寸那么需要设置其尺寸
例如在QWidget* pnew QWidget;下方增加 p-setFixedHeight(300);
这样隐藏和显示一个子窗体不会对任意其他的子窗体的尺寸造成影响。
更改后会发现当隐藏完所有的子窗体后所有的按钮被均匀布局在了主窗体如果想要的效果是按钮从主窗体从上往下紧密排列可以在layout添加完所有的控件和窗口后添加一个stretch即在this-setCentralWidget(contentArea);上一行添加layout-addStretch();