qt QSizePolicy详解

1、概述

QSizePolicy是Qt框架中的一个类,用于描述QWidget(或其子类)的尺寸策略和尺寸调整行为。它定义了widget在布局中的期望尺寸以及当布局空间不足或过多时,widget应该如何调整其尺寸。QSizePolicy由水平策略(Horizontal Policy)和垂直策略(Vertical Policy)组成,每个策略都指定了widget的最小尺寸、首选尺寸、最大尺寸以及尺寸调整方式(如扩展、收缩、固定等)。

2、重要方法

QSizePolicy提供了一些关键方法来设置和获取尺寸策略:

  • setSizeConstraint(QSizePolicy::SizeType type):设置尺寸约束类型,这影响widget的尺寸调整行为。
  • horizontalPolicy() 和 verticalPolicy():分别获取水平方向和垂直方向的尺寸策略。
  • hasHeightForWidth() 和 hasWidthForHeight():判断在给定的宽度或高度下,widget是否有足够的空间来显示其内容。这通常用于确定widget的固定尺寸方向。
  • horizontalStretch() 和 verticalStretch():获取水平方向和垂直方向的伸缩因子,这些因子在布局中用于决定widget相对于其他widget的优先扩展或收缩程度。
  • transpose():交换水平策略和垂直策略。

此外,QSizePolicy还提供了与尺寸相关的计算方法,如expandingDirections()(返回widget期望扩展的方向)、minimumSize() 和 maximumSize()(在给定策略下计算widget的最小和最大尺寸)等。

3. 常用枚举类型

Policy:

  • Fixed: 无法调整大小
  • Minimum: 不能小于sizeHint
  • Maximum: 不能大于sizeHint
  • Preferred: 优先使用sizeHint
  • Expanding: 倾向于占用更多空间
  • MinimumExpanding: 不能小于sizeHint,但倾向于占用更多空间
  • Ignored: 完全忽略sizeHint
#include 
#include 
#include 
#include 
#include 
#include 

class SizePolicyDemo : public QMainWindow {
    Q_OBJECT

public:
    SizePolicyDemo(QWidget *parent = nullptr) : QMainWindow(parent) {
        QWidget *centralWidget = new QWidget(this);
        setCentralWidget(centralWidget);
        
        QHBoxLayout *layout = new QHBoxLayout(centralWidget);
        
        // 创建三个不同大小策略的按钮
        QPushButton *fixedButton = new QPushButton("Fixed", this);
        QPushButton *expandingButton = new QPushButton("Expanding", this);
        QPushButton *minimumButton = new QPushButton("Minimum", this);
        
        // 设置Fixed策略的按钮
        QSizePolicy fixedPolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
        fixedButton->setSizePolicy(fixedPolicy);
        fixedButton->setFixedSize(100, 30);
        
        // 设置Expanding策略的按钮
        QSizePolicy expandingPolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
        expandingButton->setSizePolicy(expandingPolicy);
        
        // 设置Minimum策略的按钮
        QSizePolicy minimumPolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
        minimumButton->setSizePolicy(minimumPolicy);
        
        // 添加到布局
        layout->addWidget(fixedButton);
        layout->addWidget(expandingButton);
        layout->addWidget(minimumButton);
        
        // 添加一个标签来展示效果
        QLabel *label = new QLabel("调整窗口大小查看效果", this);
        label->setAlignment(Qt::AlignCenter);
        layout->addWidget(label);
        
        // 设置窗口属性
        setMinimumSize(400, 100);
        setWindowTitle("QSizePolicy Demo");
    }
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    
    SizePolicyDemo *window = new SizePolicyDemo();
    window->show();
    
    return app.exec();
}

技术交流qq群:

觉得有帮助的话,打赏一下呗。。

           

需要商务合作(定制程序)的欢迎私信!! 

你可能感兴趣的:(Qt,qt)