Qt元素布局

一、QGridLayout(表格布局)

(一)使用QGridLayout控件的思路

在新建QGridLayout对象之前,应该先将在将使用到的控件进行初始化。

1.初始化布局

新建QGridLayout之后,在桌面上就会出现一个网格状的布局,这个布局是看不见的,如下表格一样,那么如何确定这样的表格有几行几列呢?可以对其进行初始化

第0行第0列

第0行第1列

第1行第0列

第1行第2列

第2行第0列

第2行第2列

  1. setRowStretch(行数,行宽度); //第一个参数是行数,其最大值表示这个布局有几行;第二个参数是该行的长度比例
  2. setColumnStretch(列数,列宽度); 第一个参数是行数,其最大值表示这个布局有几列;第二个参数是该列的长度比例

2.添加控件到布局中

addWidget有两种不同的重载形式。

  1. addWidget(控件名,行数,列数);
  2. addWidget(控件名,行数,列数,控件长度占几行,控件长度占几列);

本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓

(二)设置常见属性

//设置最小列宽
void setColumnMinimumWidth(int column, int minSize)
//设置最小行高
void setRowMinimumHeight(int row, int minSize)
//设置每一列的列宽比例
void setColumnStretch(int column, int stretch)
//设置每一行的行高比例
void setRowStretch(int row, int stretch)
//设置水平方向各控件的间隔
void setHorizontalSpacing(int spacing)
//同时设置设置水平方向和垂直方向上各控件的间隔
void setSpacing(int spacing)
//设置垂直方向各控件的间隔
void setVerticalSpacing(int spacing)

设置尺寸控制模式,通过如下函数设置:

void setSizeConstraint(SizeConstraint)

其参数有如下可选值:

Constant

Value

Description

QLayout::SetDefaultConstraint

0

主小部件的最小尺寸被设置为minimumSize(),除非小部件已经有了最小尺寸。

QLayout::SetFixedSize

3

主部件的尺寸被设置为sizeHint();它根本无法调整尺寸。

QLayout::SetMinimumSize

2

主部件的最小尺寸设置为minimumSize();不能再小了。

QLayout::SetMaximumSize

4

主部件的最大尺寸设置为maximumSize();不能再大了。

QLayout::SetMinAndMaxSize

5

主小部件的最小尺寸设置为minimumSize(),最大尺寸设置为maximumSize()。

QLayout::SetNoConstraint

1

小部件不受约束。

设置表格坐标原点,通过如下函数设置:

void setOriginCorner(Qt::Corner corner)

其参数有如下可选值:

Constant

Value

Description

Qt::TopLeftCorner

0x00000

以矩形的左上角为原点。

Qt::TopRightCorner

0x00001

以矩形的右上角为原点。

Qt::BottomLeftCorner

0x00002

以矩形的左下角为原点。

Qt::BottomRightCorner

0x00003

以矩形的右下角为原点。

(三)例子

    // 初始设定
    setAttribute(Qt::WA_TransparentForMouseEvents, true);
    setMouseTracking(true);
    setFixedSize(CELL_SIZE * 3, CELL_SIZE * 2);
    QPixmap t_pixmap = QPixmap(DLG_PATH).scaled(CELL_SIZE * 3, CELL_SIZE * 3);
    setPixmap(t_pixmap);

    // 各个属性
    m_nameLabel.setText(m_name);
    m_hpLabel1.setText("血量");       m_hpLabel2.setText(QString::number(m_fullhp) + "/" + QString::number(m_fullhp));
    m_armorLabel1.setText("护甲");    m_armorLabel2.setText(QString::number(m_armor));

    // 将属性加入layout
    m_layout.addWidget(&m_nameLabel, 0, 0);
    m_layout.addWidget(&m_hpLabel1, 1, 0);      m_layout.addWidget(&m_hpLabel2, 1, 1);
    m_layout.addWidget(&m_armorLabel1, 2, 0);   m_layout.addWidget(&m_armorLabel2, 2, 1);
    m_layout.setVerticalSpacing(0);
    setLayout(&m_layout);
move(x, (localCelly - 1) * CELL_SIZE);

显示结果:

二、QVBoxLayout

QVBoxLayout类垂直排列小部件。此类用于构造垂直框布局对象。

例子:

// 为三个操作按键设置layout
m_layout = new QVBoxLayout;

m_moveButton = new QPushButton;
m_attrackButton = new QPushButton;
m_skipButton = new QPushButton;

setFixedSize(90, 90);

// 设置文字
m_moveButton->setText("移动");
m_attrackButton->setText("攻击");
m_skipButton->setText("跳过");
m_layout->addWidget(m_moveButton);
m_layout->addWidget(m_attrackButton);
m_layout->addWidget(m_skipButton);
m_layout->setSpacing(0);

setLayout(m_layout);

显示结果:

文章转自博客园(ImreW):qt元素布局 - ImreW - 博客园 

本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓

猜你喜欢

转载自blog.csdn.net/QtCompany/article/details/132196198
今日推荐