-> 今天做了个小测试,如何使用代码控制QGridLayout中的窗体比例呢?

有两个函数可以用上:

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

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

 

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

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

 

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

 

 
  1. // main.cpp  
  2.  
  3. #include <QApplication>  
  4. #include <QGridLayout>  
  5. #include <QList>  
  6. #include <QLabel>  
  7. #include <QPalette>  
  8. #include <QString>  
  9.  
  10. void setLayout2p1(QGridLayout * , QWidget * , QList<QLabel*> *);  
  11.  
  12. int main(int argc, char *argv[])  
  13. {  
  14.     QApplication a(argc, argv);  
  15.  
  16. // 初始化变量  
  17.     QPalette myPalette;  
  18.     myPalette.setColor(QPalette::Window, QColor(0, 255, 0));  
  19.     QList<QLabel *> * labelList = new QList<QLabel*>;  
  20.     for(int i = 0; i < 3; ++i){  
  21.         QLabel * temp1 = new QLabel("Label Num: " + QString::number(i + 1, 10));  
  22.         temp1 -> setAutoFillBackground(true);  
  23.         temp1->setPalette(myPalette);  
  24.         labelList->push_back(temp1);  
  25.     }  
  26.  
  27.     QGridLayout * layout2p1 = new QGridLayout();  
  28.     QWidget * testWidget = new QWidget();  
  29.  
  30. // 布局处理  
  31.     setLayout2p1(layout2p1 , testWidget, labelList);  
  32.  
  33.     int result = a.exec();  
  34.  
  35. // 程序指针delete处理  
  36.     // 先删除小的,嵌套在大窗体中的小窗体  
  37.     while(!labelList->isEmpty()){  
  38.         QLabel * temp = labelList -> last();  
  39.         labelList -> removeLast();  
  40.         delete temp;  
  41.     }  
  42.     delete labelList;   // 删除label列表  
  43.     // 然后删除窗口布局  
  44.     delete layout2p1;  
  45.     // 最后删除窗口  
  46.     delete testWidget;  // 运行widget的析构时,它会将关联的layout析构,还有放在这个layout内的窗体析构  
  47.  
  48.     return  result;  
  49. }  
  50.  
  51. void setLayout2p1(QGridLayout * layout2p1, QWidget * testWidget, QList<QLabel*> *labelList)  
  52. {  
  53.     // 放置窗口,设置窗口布局  
  54.     testWidget -> setLayout(layout2p1);  
  55.     layout2p1 -> addWidget(labelList->at(0), 0, 0);  
  56.     layout2p1 -> addWidget(labelList->at(1), 1, 0);  
  57.     layout2p1 -> addWidget(labelList ->at(2), 0, 1, 2, 1);  
  58.  
  59.     // 列比   第0列与第1列之比为 1:2  
  60.     layout2p1 -> setColumnStretch(0, 1);  
  61.     layout2p1 -> setColumnStretch(1, 2);  
  62.  
  63.     // 行比   第0行与第1行之比为1:1  
  64.     layout2p1 -> setRowStretch(0, 1);  
  65.     layout2p1 -> setRowStretch(1, 1);  
  66.  
  67.     testWidget -> show();  
  68.  
  69.     return;  
  70. }