一、布局管理器
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);
五、综合案列
头文件
-
#ifndef LAYOUT_H
-
#define LAYOUT_H
-
-
#include <QtGui>
-
-
class layout : public QDialog
-
{
-
Q_OBJECT
-
private:
-
QLabel *label_head, *label_nickname, *label_ID, *label_beautiful, *label_sex, *label_birthday, *label_age, *label_animal, *label_xing, *label_blood;
-
QPushButton *btn_head, *btn_ok, *btn_cancel;
-
QLineEdit *edit_nickname, *edit_ID;
-
QTextEdit *text_beautiful;
-
QListWidget *list;
-
QPixmap *icon;
-
QComboBox *com_sex, *com_year, *com_month, *com_day, *com_age, *com_animal, *com_xing, *com_blood;
-
public:
-
layout();
-
void dataInit();
-
public slots:
-
void changeImage();
-
};
-
-
-
#endif
构造函数
-
#include "layout.h"
-
-
layout::layout()
-
{
-
/***********************************************************/
-
label_head = new QLabel();
-
//根据路径得到图片
-
icon = new QPixmap("/QQ.png");
-
//给标签设置图片
-
label_head->setPixmap(*icon);
-
-
btn_head = new QPushButton("改变头像");
-
-
list = new QListWidget();
-
//添加条目
-
list->insertItem(0, "基本信息");
-
list->insertItem(1, "更多信息");
-
-
QVBoxLayout *vLay1 = new QVBoxLayout();
-
vLay1->addWidget(label_head);
-
vLay1->addWidget(btn_head);
-
vLay1->addWidget(list);
-
/***********************************************************/
-
label_nickname = new QLabel("昵称");
-
label_ID = new QLabel("ID");
-
label_beautiful = new QLabel("个性签名");
-
edit_nickname = new QLineEdit("ddddd");
-
edit_ID = new QLineEdit("78080458");
-
text_beautiful = new QTextEdit("As I am live, things is nothing!!只要我活着,那都不是事儿!!");
-
-
QGridLayout *gLay1 = new QGridLayout();
-
gLay1->addWidget(label_nickname, 0, 0);
-
gLay1->addWidget(label_ID, 0, 1);
-
gLay1->addWidget(edit_nickname, 1, 0);
-
gLay1->addWidget(edit_ID, 1, 1);
-
gLay1->addWidget(label_beautiful, 2, 0);
-
/***********************************************************/
-
label_sex = new QLabel("性别");
-
label_birthday = new QLabel("出生年月");
-
label_age = new QLabel("年龄");
-
label_animal = new QLabel("属相");
-
label_xing = new QLabel("星座");
-
label_blood = new QLabel("血型");
-
/***********************************************************/
-
com_sex = new QComboBox();
-
com_year = new QComboBox();
-
com_month = new QComboBox();
-
com_day = new QComboBox();
-
com_age = new QComboBox();
-
com_animal = new QComboBox();
-
com_xing = new QComboBox();
-
com_blood = new QComboBox();
-
/***********************************************************/
-
QGridLayout *gLay2 = new QGridLayout();
-
gLay2->addWidget(label_sex, 0, 0);
-
gLay2->addWidget(label_birthday, 0, 1);
-
gLay2->addWidget(com_sex, 1, 0);
-
gLay2->addWidget(com_year, 1, 1);
-
gLay2->addWidget(com_month, 1, 2);
-
gLay2->addWidget(com_day, 1, 3);
-
gLay2->addWidget(label_age, 2, 0);
-
gLay2->addWidget(label_animal, 2, 1);
-
gLay2->addWidget(label_xing, 2, 2);
-
gLay2->addWidget(label_blood, 2, 3);
-
gLay2->addWidget(com_age, 3, 0);
-
gLay2->addWidget(com_animal, 3, 1);
-
gLay2->addWidget(com_xing, 3, 2);
-
gLay2->addWidget(com_blood, 3, 3);
-
/***********************************************************/
-
QVBoxLayout *vLay2 = new QVBoxLayout();
-
vLay2->addLayout(gLay1);
-
vLay2->addWidget(text_beautiful);
-
vLay2->addLayout(gLay2);
-
/***********************************************************/
-
QHBoxLayout *hLay = new QHBoxLayout();
-
hLay->addLayout(vLay1);
-
hLay->addLayout(vLay2);
-
dataInit();
-
connect(btn_head, SIGNAL(clicked()), this, SLOT(changeImage()));
-
setLayout(hLay);
-
}
-
-
void layout::dataInit()
-
{
-
com_sex->insertItem(0,"男");
-
com_sex->insertItem(1,"女");
-
com_year->insertItem(0,"1990年");
-
com_year->insertItem(1,"1991年");
-
com_year->insertItem(2,"1992年");
-
com_year->insertItem(3,"1993年");
-
com_year->insertItem(4,"1994年");
-
com_year->insertItem(5,"1995年");
-
com_year->insertItem(6,"1996年");
-
com_year->insertItem(7,"1997年");
-
com_year->insertItem(8,"1998年");
-
com_year->insertItem(9,"1999年");
-
com_month->insertItem(0, "1月");
-
com_month->insertItem(1, "2月");
-
com_month->insertItem(2, "3月");
-
com_month->insertItem(3, "4月");
-
com_month->insertItem(4, "5月");
-
com_month->insertItem(5, "6月");
-
com_month->insertItem(6, "7月");
-
com_month->insertItem(7, "8月");
-
com_month->insertItem(8, "9月");
-
com_month->insertItem(9, "10月");
-
com_month->insertItem(10, "11月");
-
com_month->insertItem(11, "12月");
-
com_day->insertItem(0, "1日");
-
com_day->insertItem(1, "2日");
-
com_day->insertItem(2, "3日");
-
com_day->insertItem(3, "4日");
-
com_day->insertItem(4, "5日");
-
com_day->insertItem(5, "6日");
-
com_day->insertItem(6, "7日");
-
com_day->insertItem(7, "8日");
-
com_day->insertItem(8, "9日");
-
com_day->insertItem(9, "10日");
-
com_day->insertItem(10, "11日");
-
com_day->insertItem(11, "12日");
-
com_day->insertItem(12, "13日");
-
com_day->insertItem(13, "14日");
-
com_day->insertItem(14, "15日");
-
com_day->insertItem(15, "16日");
-
com_day->insertItem(16, "17日");
-
com_day->insertItem(17, "18日");
-
com_day->insertItem(18, "19日");
-
com_day->insertItem(19, "20日");
-
com_day->insertItem(20, "21日");
-
com_day->insertItem(21, "22日");
-
com_day->insertItem(22, "23日");
-
com_day->insertItem(23, "24日");
-
com_day->insertItem(24, "25日");
-
com_day->insertItem(25, "26日");
-
com_day->insertItem(26, "27日");
-
com_day->insertItem(27, "28日");
-
com_day->insertItem(28, "29日");
-
com_day->insertItem(29, "30日");
-
com_day->insertItem(30, "31日");
-
//添加条目的又一种方式
-
QStringList listAnimal;
-
listAnimal<<"鼠"<<"牛"<<"虎"<<"兔"<<"龙"<<"蛇"<<"马"<<"羊"<<"猴"<<"鸡"<<"狗"<<"猪";
-
com_animal->addItems(listAnimal);
-
QStringList listXing;
-
listXing<<"白羊"<<"金牛"<<"双子"<<"巨蟹"<<"狮子"<<"处女"<<"天秤"<<"天蝎"<<"射手"<<"魔蟹"<<"水瓶"<<"双鱼";
-
com_xing->addItems(listXing);
-
QStringList listBlood;
-
listBlood<<"A"<<"B"<<"AB"<<"O"<<"其他";
-
com_blood->addItems(listBlood);
-
}
-
-
void layout::changeImage()
-
{
-
//打开文件对话框,获取文件名字
-
QString str = QFileDialog::getOpenFileName(this, "打开文件", "/", "All File(*.*)");
-
//通过名字找到图片
-
QPixmap *temp = new QPixmap(str);
-
if(temp!=NULL)
-
icon = temp;
-
label_head->setPixmap(*icon);
-
}
主程序
-
#include "layout.h"
-
#include <QApplication>
-
-
int main(int argc, char *argv[])
-
{
-
//设置编码,防止汉字出现乱码
-
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
-
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
-
QApplication app(argc, argv);
-
-
layout lay;
-
lay.show();
-
-
return app.exec();
-
}
结果
阅读(1130) | 评论(0) | 转发(0) |