Qt布局管理器入门

来源:互联网 发布:淘宝中店铺名片分享 编辑:程序博客网 时间:2024/06/10 09:48

废话:

正式(只是自己觉得啊)开始学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"//我新建的类名为:LayoutDlgint 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();//1QListView *list=new QListView();//2QWidget *Widget=new QWidget();//3setCentralWidget(Widget);//4QGridLayout *mainLayout=new QGridLayout();//5mainLayout->addWidget(tree,0,0);//6mainLayout->addWidget(list,0,1);//7Widget->setLayout(mainLayout);//8
注意第3,4,8行,main.cpp与上面的相同。

2、我想要的界面:


左侧为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_OBJECTpublic: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),然后看属性编辑器:


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

layoutColumnMinimunWidth是两列的最小宽度。

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

3、提问的技巧:

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

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

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

原创粉丝点击