Qt布局管理器入门

废话:

正式(只是自己觉得啊)开始学Qt大概有一个周左右了,由于以前接触过几天,在Qt Creater下写过几行代码,感觉整体入门还好。就是在vs2010中配置和界面这里遇到问题了,还好,现在都已经解决了。

下面说下我遇到的问题和一些感觉吧:

1、QMainWindow与QDialog

写界面么,刚开始肯定想先试下代码,不想有太多的干扰,我的方法是:在vs2010中新建Qt Console Application,然后,把链接器----系统----子系统的控制台改为窗口。

用代码生成界面时,我们一般会先新建一个类(好多书中都有例子),该类继承于QDialog类,直接添加相应代码就可以了,如下:

	QTreeView *tree=new QTreeView();
	QListView *list=new QListView();
	QGridLayout *mainLayout=new QGridLayout();
	mainLayout->addWidget(tree,0,0);
	mainLayout->addWidget(list,0,1);
然后main.cpp中

#include <QtGui\QtGui.h>
#include "layoutdlg.h"//我新建的类名为:LayoutDlg
int main(int argc, char *argv[])
{
	QApplication app(argc,argv);
	LayoutDlg *lay=new LayoutDlg();
	lay->show();
	return app.exec();
}
生成就可以看到效果了。

但是如果你选择继承于QMainWindow,只加入上面代码,就会出现问题,生成之后没有效果,今天意外发现如果在QMainWindow中使用QGridLayout,必须先新建一个QWidget对象,然后设置,代码如下:

	QTreeView *tree=new QTreeView();//1
	QListView *list=new QListView();//2
	
	QWidget *Widget=new QWidget();//3
	setCentralWidget(Widget);//4
	QGridLayout *mainLayout=new QGridLayout();//5

	mainLayout->addWidget(tree,0,0);//6
	mainLayout->addWidget(list,0,1);//7
	
	Widget->setLayout(mainLayout);//8
注意第3,4,8行,main.cpp与上面的相同。

2、我想要的界面:

Qt布局管理器入门_第1张图片

左侧为QTreeView,右侧为QListView,左右比例为1:3,当改变窗口大小时,控件自动调整。

2.1、用代码生成:

新建一个空项目(新建Qt Console Application,然后子系统改为窗口启动),添加一个类LayoutDlg,继承于QMainWindow(因为后面要加菜单等)。

三个文件代码如下:

//main.cpp
#include <QtGui\QtGui.h>
#include "layoutdlg.h"

int main(int argc, char *argv[])
{
	QApplication app(argc,argv);
	LayoutDlg *lay=new LayoutDlg();
	lay->show();
	return app.exec();
}

//layoutdlg.h
#ifndef LAYOUTDLG_H
#define LAYOUTDLG_H

#include <QtGui.h>

class LayoutDlg:public QMainWindow
{
	Q_OBJECT
public:
	LayoutDlg(QWidget *parent=0);

	QTreeView *tree;
	QListView *list;
};

#endif

//layoutdlg.cpp
#include "layoutdlg.h"
#include <stdio.h>

LayoutDlg::LayoutDlg(QWidget *parent)
	:QMainWindow(parent)
{
	*tree=new QTreeView();
	*list=new QListView();
	
	QWidget *Widget=new QWidget();
	setCentralWidget(Widget);
	QGridLayout *mainLayout=new QGridLayout();
	mainLayout->setColumnMinimumWidth(0,150);//这里设置第1列最小宽度
	mainLayout->setColumnMinimumWidth(1,600);//设置第2列
	mainLayout->setRowMinimumHeight(0,500);

	mainLayout->setColumnStretch(0,1);//设置两列比例
	mainLayout->setColumnStretch(1,4);

	mainLayout->addWidget(tree,0,0);
	mainLayout->addWidget(list,0,1);
	
	Widget->setLayout(mainLayout);
}

2.2、用Qt Designer生成:

Qt Designer中新建一个MainWindow,直接拖放上一个QTreeView、一个QListView,选定两个控件,然后右键----->栅栏布局(其它布局也可以),这里两个空间会变成一样大小。重点来了:选中最外面的红色框(GridLayout),然后看属性编辑器:

Qt布局管理器入门_第2张图片

layoutColumnStrech原本是0,0(代表第一列,第二列的比例),我改为了1,4。

layoutColumnMinimunWidth是两列的最小宽度。

(就是这里,我搞了两天,问了好多人,有一个感悟:难者不会,会者不难)。

3、提问的技巧:

对于提问:昨天,在群里问,但是问的大多都没有什么答案,大家都很忙,也有可能是我表达不清楚,别人不明白我的意思,几句话说不太清楚。在网上搜,无论怎么搜,都是那些代码,各种转载,各自一样的代码,都没有我能用的。

今天:我把我的问题详细的写了一下,发到了百度提问和csdn的论坛上,然后,把链接发到了群里请教。效果很好,半天就解决了问题。我觉得这种方法还是不错的提问方式。

最后,希望大家多去论坛看看,能帮的就帮一下,也是提高自己的一种方式。

你可能感兴趣的:(Qt布局管理器入门)