正式(只是自己觉得啊)开始学Qt大概有一个周左右了,由于以前接触过几天,在Qt Creater下写过几行代码,感觉整体入门还好。就是在vs2010中配置和界面这里遇到问题了,还好,现在都已经解决了。
下面说下我遇到的问题和一些感觉吧:
写界面么,刚开始肯定想先试下代码,不想有太多的干扰,我的方法是:在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与上面的相同。
左侧为QTreeView,右侧为QListView,左右比例为1:3,当改变窗口大小时,控件自动调整。
新建一个空项目(新建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); }
Qt Designer中新建一个MainWindow,直接拖放上一个QTreeView、一个QListView,选定两个控件,然后右键----->栅栏布局(其它布局也可以),这里两个空间会变成一样大小。重点来了:选中最外面的红色框(GridLayout),然后看属性编辑器:
layoutColumnStrech原本是0,0(代表第一列,第二列的比例),我改为了1,4。
layoutColumnMinimunWidth是两列的最小宽度。
(就是这里,我搞了两天,问了好多人,有一个感悟:难者不会,会者不难)。
对于提问:昨天,在群里问,但是问的大多都没有什么答案,大家都很忙,也有可能是我表达不清楚,别人不明白我的意思,几句话说不太清楚。在网上搜,无论怎么搜,都是那些代码,各种转载,各自一样的代码,都没有我能用的。
今天:我把我的问题详细的写了一下,发到了百度提问和csdn的论坛上,然后,把链接发到了群里请教。效果很好,半天就解决了问题。我觉得这种方法还是不错的提问方式。
最后,希望大家多去论坛看看,能帮的就帮一下,也是提高自己的一种方式。