Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1741914
  • 博文数量: 1493
  • 博客积分: 38
  • 博客等级: 民兵
  • 技术积分: 5834
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-19 17:28
文章分类

全部博文(1493)

文章存档

2016年(11)

2015年(38)

2014年(137)

2013年(253)

2012年(1054)

2011年(1)

分类: C/C++

2015-12-08 16:32:15

原文地址:lesson5-文件布局 作者:一生有你llx

一、布局管理器
    1、QT布局管理器是Qt图形设计最基本的内容,是管理窗口子部件最好的方法,也是醉使用的方法。Qt封装了布局管理器类:
    1)水平布局QHBoxLayout
    
    2)垂直布局QVBoxLayout
    
    3)网格布局QGridLayout
    
    2、布局管理器可以有效的组织管理空间,但是子部件的布局也会受到自身的大小策略的影响。部件的策略可以告诉布局管理器窗口变化时,控件是如何被拉伸或者缩小的
    QSizePolicy::Fixed
    窗口部件保持在sizeHint(),不能放大也不能缩小。sizeHint()是推荐的尺寸
    QSizePolicy::Minimum
    sizeHint()是最小值,部件不能被压缩,可以放大,范围是sizeHint()~无穷大
    QSizePolicy::Maximum
    sizeHint()是最大值,部件不能放大,可以缩小,范围是0~sizeHint()
    QSizePolicy::Preferred
    sizeHint()是最合适值,如果需要可以缩小放大,范围是0~无穷大
    QSizePolicy::Expanding
    可以拉伸也可以压缩,但是拉伸效果更好,范围是0~无穷大
    QSizePolicy::MinimumExpanding
    可以拉伸也可以压缩,但是拉伸效果更好,范围是sizeHint()~无穷大
    QSizePolicy::Ignored
    尽可能伸展,范围是0~无穷大
     3、布局使用
    QVBoxLayout *vLay = new QVBoxLayout();    //创建垂直布局
    vLay->addWidget(widget);     //addLayout()   给布局添加控件
    QHBoxLayout *hLay = new QHBoxLayout();    //创建水平布局
    hLay->addWidget(widget);                            //给布局添加控件
    QGridLayout *gLay = new QGridLayout();        //创建网格布局
    gLay->addWidget(widget,row, col);            //添加控件,指定控件在网格中的行与列
    setLayout()                                                //加载布局
    4、QTabWidget使用
    QTabWidget *ab = new QTabWidget();//创建tab
    QWidget *w1 = new QWidget();//创造widget
    QWidget *w2 = new QWidget();
    tab->addTab(w1, "h"); //添加widget,以及给它起名
    tab->addTab(w2, "v");
    tab->setTabPosition(QTabWidget::South);//设置标签位置
    

二、分裂器
    分裂器将窗口分裂成子窗口,并且可以通过拖动分裂柄来改变子窗口大小。分裂器部件中可以添加其他窗口部件
    分裂器使用方法:
    QSplitter *sp1 = new QSplitter(Qt::Vertical, 0);
    QSplitter *sp2 = new QSplitter(Qt::Vertical, 0);
    第一个参数代表分裂方式,有水平和垂直,第二个参数是父窗口。
    添加分裂器之后,可以像分裂器添加控件,只要在创造控件的时候指定其父控件为分裂器即可
    text = new QTextEidt(“123”, sp2);
    或者使用addWidget方法
    sp1->addWidget(text);

三、栈部件
    栈部件QStackedWidget,提供了一个栈空间,在这里同一时刻只能显示一个部件,其使用方法如下
    定义一个栈部件
    QStackedWidget stackedWidget = new QStackedWidget(this);
    定义几个text
    QTextEdit *text1 = new QTextEdit("one");
    QTextEdit *text2 = new QTextEdit("two");
    QTextEdit *text3 = new QTextEdit("three");
    将按钮添加到栈,这时按照添加顺序,每个控件都会有一个索引值
    stackedWidget->addWidget(text1);
    stackedWidget->addWidget(text2);
    stackedWidget->addWidget(text3);
    绑定信号和槽函数,选中下拉列表值显示某个控件
    connect(btn1, SIGNAL(currentIndexChanged()), stackWidget, SLOT(setCurrentIndex(int)));
 
四、工作空间
    工作空间QWorkspace提供了一个可以包含内部窗口的工作区域,在MDI中会使用到工作空间,具体使用方法
    创造一个工作空间
    QWorkspace *work = new QWorkspace();
    QMainWindow *windows1 = new QMainWindow();
    创造几个窗口
    QMainWindow *windows2 = new QMainWindow();
    想工作空间添加窗口
    work->addWindow(window1);
    work->addWindow(window1);

五、综合案列
头文件

点击(此处)折叠或打开

  1. #ifndef LAYOUT_H
  2. #define LAYOUT_H

  3. #include <QtGui>

  4. class layout : public QDialog
  5. {
  6. Q_OBJECT
  7. private:
  8.     QLabel *label_head, *label_nickname, *label_ID, *label_beautiful, *label_sex, *label_birthday, *label_age, *label_animal, *label_xing, *label_blood;
  9.     QPushButton *btn_head, *btn_ok, *btn_cancel;
  10.     QLineEdit *edit_nickname, *edit_ID;
  11.     QTextEdit *text_beautiful;
  12.     QListWidget *list;
  13.     QPixmap *icon;
  14.     QComboBox *com_sex, *com_year, *com_month, *com_day, *com_age, *com_animal, *com_xing, *com_blood;
  15. public:
  16.     layout();
  17.     void dataInit();
  18. public slots:
  19.     void changeImage();
  20. };


  21. #endif
构造函数

点击(此处)折叠或打开

  1. #include "layout.h"

  2. layout::layout()
  3. {
  4. /***********************************************************/
  5.     label_head = new QLabel();
  6.     //根据路径得到图片
  7.     icon = new QPixmap("/QQ.png");
  8.     //给标签设置图片
  9.     label_head->setPixmap(*icon);

  10.     btn_head = new QPushButton("改变头像");

  11.     list = new QListWidget();
  12.     //添加条目
  13.     list->insertItem(0, "基本信息");
  14.     list->insertItem(1, "更多信息");

  15.     QVBoxLayout *vLay1 = new QVBoxLayout();
  16.     vLay1->addWidget(label_head);
  17.     vLay1->addWidget(btn_head);
  18.     vLay1->addWidget(list);
  19. /***********************************************************/
  20.     label_nickname = new QLabel("昵称");
  21.     label_ID = new QLabel("ID");
  22.     label_beautiful = new QLabel("个性签名");
  23.     edit_nickname = new QLineEdit("ddddd");
  24.     edit_ID = new QLineEdit("78080458");
  25.     text_beautiful = new QTextEdit("As I am live, things is nothing!!只要我活着,那都不是事儿!!");

  26.     QGridLayout *gLay1 = new QGridLayout();
  27.     gLay1->addWidget(label_nickname, 0, 0);
  28.     gLay1->addWidget(label_ID, 0, 1);
  29.     gLay1->addWidget(edit_nickname, 1, 0);
  30.     gLay1->addWidget(edit_ID, 1, 1);
  31.     gLay1->addWidget(label_beautiful, 2, 0);
  32. /***********************************************************/
  33.     label_sex = new QLabel("性别");
  34.     label_birthday = new QLabel("出生年月");
  35.     label_age = new QLabel("年龄");
  36.     label_animal = new QLabel("属相");
  37.     label_xing = new QLabel("星座");
  38.     label_blood = new QLabel("血型");
  39. /***********************************************************/
  40.     com_sex = new QComboBox();
  41.     com_year = new QComboBox();
  42.     com_month = new QComboBox();
  43.     com_day = new QComboBox();
  44.     com_age = new QComboBox();
  45.     com_animal = new QComboBox();
  46.     com_xing = new QComboBox();
  47.     com_blood = new QComboBox();
  48. /***********************************************************/
  49.     QGridLayout *gLay2 = new QGridLayout();
  50.     gLay2->addWidget(label_sex, 0, 0);
  51.     gLay2->addWidget(label_birthday, 0, 1);
  52.     gLay2->addWidget(com_sex, 1, 0);
  53.     gLay2->addWidget(com_year, 1, 1);
  54.     gLay2->addWidget(com_month, 1, 2);
  55.     gLay2->addWidget(com_day, 1, 3);
  56.     gLay2->addWidget(label_age, 2, 0);
  57.     gLay2->addWidget(label_animal, 2, 1);
  58.     gLay2->addWidget(label_xing, 2, 2);
  59.     gLay2->addWidget(label_blood, 2, 3);
  60.     gLay2->addWidget(com_age, 3, 0);
  61.     gLay2->addWidget(com_animal, 3, 1);
  62.     gLay2->addWidget(com_xing, 3, 2);
  63.     gLay2->addWidget(com_blood, 3, 3);
  64. /***********************************************************/
  65.     QVBoxLayout *vLay2 = new QVBoxLayout();
  66.     vLay2->addLayout(gLay1);
  67.     vLay2->addWidget(text_beautiful);
  68.     vLay2->addLayout(gLay2);
  69. /***********************************************************/
  70.     QHBoxLayout *hLay = new QHBoxLayout();
  71.     hLay->addLayout(vLay1);
  72.     hLay->addLayout(vLay2);
  73.     dataInit();
  74.     connect(btn_head, SIGNAL(clicked()), this, SLOT(changeImage()));
  75.     setLayout(hLay);
  76. }

  77. void layout::dataInit()
  78. {
  79.     com_sex->insertItem(0,"男");
  80.     com_sex->insertItem(1,"女");
  81.     com_year->insertItem(0,"1990年");
  82.     com_year->insertItem(1,"1991年");
  83.     com_year->insertItem(2,"1992年");
  84.     com_year->insertItem(3,"1993年");
  85.     com_year->insertItem(4,"1994年");
  86.     com_year->insertItem(5,"1995年");
  87.     com_year->insertItem(6,"1996年");
  88.     com_year->insertItem(7,"1997年");
  89.     com_year->insertItem(8,"1998年");
  90.     com_year->insertItem(9,"1999年");
  91.     com_month->insertItem(0, "1月");
  92.     com_month->insertItem(1, "2月");
  93.     com_month->insertItem(2, "3月");
  94.     com_month->insertItem(3, "4月");
  95.     com_month->insertItem(4, "5月");
  96.     com_month->insertItem(5, "6月");
  97.     com_month->insertItem(6, "7月");
  98.     com_month->insertItem(7, "8月");
  99.     com_month->insertItem(8, "9月");
  100.     com_month->insertItem(9, "10月");
  101.     com_month->insertItem(10, "11月");
  102.     com_month->insertItem(11, "12月");
  103.     com_day->insertItem(0, "1日");
  104.     com_day->insertItem(1, "2日");
  105.     com_day->insertItem(2, "3日");
  106.     com_day->insertItem(3, "4日");
  107.     com_day->insertItem(4, "5日");
  108.     com_day->insertItem(5, "6日");
  109.     com_day->insertItem(6, "7日");
  110.     com_day->insertItem(7, "8日");
  111.     com_day->insertItem(8, "9日");
  112.     com_day->insertItem(9, "10日");
  113.     com_day->insertItem(10, "11日");
  114.     com_day->insertItem(11, "12日");
  115.     com_day->insertItem(12, "13日");
  116.     com_day->insertItem(13, "14日");
  117.     com_day->insertItem(14, "15日");
  118.     com_day->insertItem(15, "16日");
  119.     com_day->insertItem(16, "17日");
  120.     com_day->insertItem(17, "18日");
  121.     com_day->insertItem(18, "19日");
  122.     com_day->insertItem(19, "20日");
  123.     com_day->insertItem(20, "21日");
  124.     com_day->insertItem(21, "22日");
  125.     com_day->insertItem(22, "23日");
  126.     com_day->insertItem(23, "24日");
  127.     com_day->insertItem(24, "25日");
  128.     com_day->insertItem(25, "26日");
  129.     com_day->insertItem(26, "27日");
  130.     com_day->insertItem(27, "28日");
  131.     com_day->insertItem(28, "29日");
  132.     com_day->insertItem(29, "30日");
  133.     com_day->insertItem(30, "31日");
  134.     //添加条目的又一种方式
  135.     QStringList listAnimal;
  136.     listAnimal<<"鼠"<<"牛"<<"虎"<<"兔"<<"龙"<<"蛇"<<"马"<<"羊"<<"猴"<<"鸡"<<"狗"<<"猪";
  137.     com_animal->addItems(listAnimal);
  138.     QStringList listXing;
  139.     listXing<<"白羊"<<"金牛"<<"双子"<<"巨蟹"<<"狮子"<<"处女"<<"天秤"<<"天蝎"<<"射手"<<"魔蟹"<<"水瓶"<<"双鱼";
  140.     com_xing->addItems(listXing);
  141.     QStringList listBlood;
  142.     listBlood<<"A"<<"B"<<"AB"<<"O"<<"其他";
  143.     com_blood->addItems(listBlood);
  144. }

  145. void layout::changeImage()
  146. {
  147.     //打开文件对话框,获取文件名字
  148.     QString str = QFileDialog::getOpenFileName(this, "打开文件", "/", "All File(*.*)");
  149.     //通过名字找到图片
  150.     QPixmap *temp = new QPixmap(str);
  151.     if(temp!=NULL)
  152.     icon = temp;
  153.     label_head->setPixmap(*icon);
  154. }
主程序

点击(此处)折叠或打开

  1. #include "layout.h"
  2. #include <QApplication>

  3. int main(int argc, char *argv[])
  4. {
  5.     //设置编码,防止汉字出现乱码
  6.     QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
  7.     QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
  8.     QApplication app(argc, argv);

  9.     layout lay;
  10.     lay.show();

  11.     return app.exec();
  12. }
结果






 





阅读(1130) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~