您的位置:首页 > 编程语言 > Qt开发

Qt的QGridLayout按比例设定布局

2012-08-20 10:57 369 查看
-> 今天做了个小测试,如何使用代码控制QGridLayout中的窗体比例呢?

有两个函数可以用上:

QGridLayout::setColumnStretch(列码, 比例值);

QGridLayout::setRowStretch(行码, 比例值);

-> 下面是需要实现的比例效果图:

第一行和第二行是1:1,第一列和第二列是1:2





->具体使用方法见示例代码:

// main.cpp

#include <QApplication>
#include <QGridLayout>
#include <QList>
#include <QLabel>
#include <QPalette>
#include <QString>

void setLayout2p1(QGridLayout * , QWidget * , QList<QLabel*> *);

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

// 初始化变量
QPalette myPalette;
myPalette.setColor(QPalette::Window, QColor(0, 255, 0));
QList<QLabel *> * labelList = new QList<QLabel*>;
for(int i = 0; i < 3; ++i){
QLabel * temp1 = new QLabel("Label Num: " + QString::number(i + 1, 10));
temp1 -> setAutoFillBackground(true);
temp1->setPalette(myPalette);
labelList->push_back(temp1);
}

QGridLayout * layout2p1 = new QGridLayout();
QWidget * testWidget = new QWidget();

// 布局处理
setLayout2p1(layout2p1 , testWidget, labelList);

int result = a.exec();

// 程序指针delete处理
// 先删除小的,嵌套在大窗体中的小窗体
while(!labelList->isEmpty()){
QLabel * temp = labelList -> last();
labelList -> removeLast();
delete temp;
}
delete labelList;   // 删除label列表
// 然后删除窗口布局
delete layout2p1;
// 最后删除窗口
delete testWidget;  // 运行widget的析构时,它会将关联的layout析构,还有放在这个layout内的窗体析构

return  result;
}

void setLayout2p1(QGridLayout * layout2p1, QWidget * testWidget, QList<QLabel*> *labelList)
{
// 放置窗口,设置窗口布局
testWidget -> setLayout(layout2p1);
layout2p1 -> addWidget(labelList->at(0), 0, 0);
layout2p1 -> addWidget(labelList->at(1), 1, 0);
layout2p1 -> addWidget(labelList ->at(2), 0, 1, 2, 1);

// 列比   第0列与第1列之比为 1:2
layout2p1 -> setColumnStretch(0, 1);
layout2p1 -> setColumnStretch(1, 2);

// 行比   第0行与第1行之比为1:1
layout2p1 -> setRowStretch(0, 1);
layout2p1 -> setRowStretch(1, 1);

testWidget -> show();

return;
}


本文出自 “Neicole — Data Library” 博客,请务必保留此出处http://neicole.blog.51cto.com/5621716/967329
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: