废话:
正式(只是自己觉得啊)开始学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、我想要的界面:

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

layoutColumnStrech原本是0,0(代表第一列,第二列的比例),我改为了1,4。
layoutColumnMinimunWidth是两列的最小宽度。
(就是这里,我搞了两天,问了好多人,有一个感悟:难者不会,会者不难)。
3、提问的技巧:
对于提问:昨天,在群里问,但是问的大多都没有什么答案,大家都很忙,也有可能是我表达不清楚,别人不明白我的意思,几句话说不太清楚。在网上搜,无论怎么搜,都是那些代码,各种转载,各自一样的代码,都没有我能用的。
今天:我把我的问题详细的写了一下,发到了百度提问和csdn的论坛上,然后,把链接发到了群里请教。效果很好,半天就解决了问题。我觉得这种方法还是不错的提问方式。
最后,希望大家多去论坛看看,能帮的就帮一下,也是提高自己的一种方式。

被折叠的 条评论
为什么被折叠?



