赞
踩
QT最大的优点之一就是它可以直接“画”出程序的界面,如果你用过MFC或者VB之类的,就能体会到一行代码也不用写,直接拖放控件就能画出界面的幸福。但在这个系列的文章里,我并不打算教大家如何使用QT Designer那种辅助画界面的工具,我们要手写界面。没错!用代码定义一切!!
来,我们做一个Hello World吧!ヾ(≧O≦)〃嗷~
本篇文章代码仓库地址:https://gitee.com/crystalgabrielle/QTSamples/tree/master/2/2_1_HelloWorld/HelloWorld
QTSamples中的2/2_1_HelloWorld
新建好的空项目只有一个项目名加后缀pro的文件,是该项目的配置文件,相当于一个全局的注册文件,在程序中用到的QT组件、模块都要添加到这里,其它资源、图片之类的也都要添加进来。
我们先加上核心组件和widget吧,语法很简单,在helloworld.pro
文件中加入如下代码
QT += core gui
QT += widgets
C++程序是用类堆起来的,QT也是的。所以我们写QT程序的时候,只要继承这些类就好啦。QT的类有多么复杂,从这张截图就可以管窥一二。
(图源 https://blog.csdn.net/faith_yu/article/details/53025582)
在项目中创建一个新的类。文件->新建文件或项目,选择文件和类,C++ Class。
名字叫什么都行,剩下的默认就好了。
QT自动为这个类创建了一个头文件和一个定义文件,我们的主要工作就是修改这两个。
QT有三大常用框架类,QWidget
,QMainWIndow
和QDialog
。我们就让它继承QWidget类吧。
将helloworld.h
改成这样:
#ifndef HELLOWORLD_H #define HELLOWORLD_H #include<QWidget> #include<QString> #include<QLabel> #include<QPushButton> #include<QObject> class helloworld : public QWidget { Q_OBJECT private: QLabel *hello_board; QPushButton *exit_button; public: explicit helloworld(QWidget *parent = nullptr); private slots: void exit_qt(); }; #endif // HELLOWORLD_H
将helloworld.cpp
改成这样:
#include "helloworld.h" helloworld::helloworld(QWidget *parent) : QWidget(parent) { this->show(); this->setGeometry(100,100,400,300); hello_board=new QLabel(this); hello_board->setGeometry(100,100,200,100); hello_board->setText("Hello!This is QT!"); hello_board->show(); exit_button=new QPushButton("Push me to exit!"); exit_button->setParent(this); exit_button->setGeometry(125,225,150,50); connect(exit_button,SIGNAL(clicked()),this,SLOT(exit_qt())); exit_button->show(); } void helloworld::exit_qt(){ delete hello_board; delete exit_button; this->close(); }
虽然还没有介绍QT是怎么编成的,但是你大概应该能看出来一二。
现在只有一个类,项目还不能运行,没有入口。在项目中创建main.cpp
文件,这是QT项目的入口。
文件->新建文件或项目,选择文件和类,C++源文件,名称为main.cpp
在其中添加如下代码:
#include <QApplication>
#include<helloworld.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
helloworld new_hello;
a.exec();
return 0;
}
前面的那两个文件你可以先不去了解,我希望你能记住这个main.cpp
首先要创建一个QApplication
对象,之后创建一个你自己的类的实例,它会自动启动你的类,然后让QApplication
对象进入主事件循环a.exec()
。
在简单开发过程中,无论是以Debug方式运行还是以Release方式运行,都推荐关闭Shadow build
,如果开启这个选项,运行时会在项目文件夹下新建对应的文件夹,来进行构建,但这样有时会很麻烦,比如你在目录文件夹下存放图片、音频等资源文件,但构建的时候是在子目录下,会无法调用外部资源。
关闭好后点击左下角的绿色箭头开始运行,你选择了Debug
和Release
都无所谓,我们做的都是小程序,没必要分得太细致啦~
铛铛铛!我们的HelloWorld出来啦!点一下按钮就可以退出,有没有开心到飞起呢?
到这里你应该能成功跑起来你的QT Hello World了吧,哈哈哈!
看完这篇文章,我希望你能了解创建和运行QT项目的一般方法,当然,这并不一般,而是我喜欢的从零做起的方法,哈哈哈!其实用代码写界面也没有多么难,习惯之后还是很顺畅的。现在你还不需要了解那个类是怎么写的,但我希望你能记住那个main.cpp
,因为在后面我们的写的程序当中,基本都是那样做的,创建一个QApplication
对象,创建自己类的实例,然后进入主事件循环,程序就这么跑起来了。如果未来你会用QT做更高级的开发,可能还会在main.cpp
里做更多的事情。好啦,下期见啦~~~
你可能会很好奇为什么QT的画界面那么方便,我却对代码情有独钟。
大一做QT小组作业的时候,我分到的都是像数独、扫雷那样的有很多相同控件的程序。那时才疏学浅,也不知道怎么才能方便的画那么多,就算画出来也不好控制。当时的解决方案是在代码里用数组代替,相比较画控件,代码的自由度更高,你可以更改、控制的也更多。后来慢慢走火入魔,创建项目时干脆创建一个空项目,自己从零做起。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。