创建项目
第一次学习Qt,应当尝试完全从零开始建一个 Qt项目以加深印象
如下图所示,在Qt Creator中,选择创建一个空的Qt 项目,然后一直确认到最终创建完毕。
如下图,将创建完毕一个空的Qt项目,项目中仅包含一个pro后缀的文件,该文件为项目的qmake构建文件。
在.pro后缀的文件中写入
QT += widgets
表示当前项目为一个Widget项目
编写代码
接下来,应该创建一个主函数所在的代码文件,右击项目,选择【添加新文件】->【C++ Source File】文件名为main.cpp
写入如下的c++代码
#include <QApplication>
int main(int argc,char **argv){
QApplication a(argc,argv);
//主要代码区
return a.exec();
}
如图,
则为一个最小的qt程序,此时编译(可使用快捷键ctrl+r)出的程序运行起来并没有任何窗口,但是如下图我们可以看到程序正在运行,这是因为我们的程序还没有创建并显示任何的窗口控件。
显示窗口
#include <QApplication>
#include <QWidget> //窗口控件基类
int main(int argc,char **argv){
QApplication a(argc,argv);
QWidget w; //直接用窗口控件基类创建一个窗口控件
w.show(); //显示这个窗口控件
return a.exec();
}
此时再次编译运行,得到以下窗口
设置属性
我们还可以对该窗口控件的属性做一系列设置,如下列代码
#include <QApplication>
#include <QWidget>
int main(int argc,char **argv){
QApplication a(argc,argv);
QWidget w;
//设置标题
w.setWindowTitle(QString("这是标题"));
//设置窗口的最小尺寸
w.setMinimumHeight(100);
w.setMinimumWidth(100);
//设置窗口的最大尺寸
w.setMaximumHeight(200);
w.setMaximumWidth(200);
w.show();
return a.exec();
}
运行结果如下,
该窗口的宽高尺寸将只能在100~200像素范围内拉伸
添加按钮
下面尝试添加一个按钮到窗口,
按钮类为QPushButton
需要在开头#include <QPushButton>
按钮也是一个Widget控件,可以被显示出来,使用下列代码可单独显示一个按钮
QPushButton b;
b.setText("我是按钮");
b.setParent(&w);
b.show();
如图,可单独显示一个按钮作为整个程序窗口
如果我们想要将按钮添加到之前的空QWidget窗口中,也就是我们需要对按钮指定一个父容器对象,如下代码,
#include <QApplication>
#include <QWidget>
#include <QPushButton>
int main(int argc,char **argv){
QApplication a(argc,argv);
QWidget w;
//设置标题
w.setWindowTitle(QString("这是标题"));
QPushButton b;
b.setText("我是按钮");
b.setParent(&w);
//b.show();
w.show();
return a.exec();
}
运行效果如图,
假如我们不调用b.setParent(&w),那么上述程序将创建两个分别独立的窗口,一个纯空白窗口,一个纯按钮窗口。
注意:从上述代码可看出,若b为w的子控件,那么不用调用b.show()方法仅调用w.show()方法也可正常显示出按钮,也就是说只要父对象显示,其中的子对象自动显示。
指定父对象的方法:
- 上述的setParent方法
- 直接通过构造函数传递父控件对象的指针
如下代码直接通过构造函数传入其父对象也可达到上述代码同样的作用
#include <QApplication>
#include <QWidget>
#include <QPushButton>
int main(int argc,char **argv){
QApplication a(argc,argv);
QWidget w;
w.setWindowTitle(QString("这是标题"));
QPushButton b(&w);
b.setText("我是按钮");
w.show();
return a.exec();
}
通过b.move(x,y)还可以设置组件相对于它父控件的位置,如b.move(100,100)
可得效果如下,