栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

QT 入门

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

QT 入门

文章目录
    • QT概述
    • 创建QT项目
    • .pro文件
    • Headers 分组
    • Sources 分组
    • Froms 分组
    • 运行一个QT项目
    • 注意事项
    • 信号和槽
    • 自定义信号槽

QT概述

QT是一个跨平台的C++图形用户界面应用程序框架,是面向对象的。
划重点:!!!

  1. 跨平台
  2. 语言:C++
  3. 图形用户界面应用程序框架(我的理解,就是可视化工具)
创建QT项目
  1. 打开 QT Creator(不得不说,之前装过几次QT,也不知道各个组件是干嘛的,一打开文件夹看到一群图标,就人傻了),所以,再次提醒我自己,创建项目用的是QT Creator!!!
  2. 打开之后长这样
  3. 创建项目

    按照1,2,3的顺序点击(这里,各种项目的类型我还没搞明白,只能先记住了…)

    先对新创建的项目命名,然后选择项目存储的路径,最后,点击下一步

    这一步,选择的是编译套件,(QT会自动帮你选择)点击下一步

    这一步,系统默认添加一个继承子自CMainWindow的类,在这里可以修改类的名字和基类。
    连续两次,点击下一步,既可创建出一个QT程序

    创建完之后,会弹出这样的页面。


QMainWindow 是主窗口类,主窗口具有菜单栏、工具栏和状态栏,类似于一般的应用程序的主窗口
QWidget是所有具有可视化界面类的基类,选择QWidget创建的界面对各种界面组件都可以支持
QDialog是对话框类,可建立一个基于对话框的界面

点开你刚刚创建的文件夹,或者是,你存放项目的文件夹,都能看到这几个文件,下面解释一下它们

.pro文件

.pro就是工程文件(project),他是qmake自动生成的用于生产makefile的配置文件。
一般情况下,.pro文件的文件格式

模板变量:TEMPLATE,这个玩意儿告诉qmake为这个应用程序生成哪种makefile

Headers 分组

该节点下是项目内所有的头文件(.h)

Sources 分组

该项目内的所有C++源文件(.cpp),如上图,mainwindow.cpp是主窗口类的实现文件,也是程序的入口

Froms 分组

该节点下是项目内的所有界面文件(.ui)
mainwindow.ui就是主窗口的界面文件。
界面文件是文本文件,使用XML语言描述界面的组成

运行一个QT项目

说起这个,就又得提我的傻逼行为,生成的一堆文件中,我不知道运行哪个,搁那儿乱运行一通…
强调,运行的是main.cpp文件!!!
打开,可以看到一个最最进本的QT项目,生成一个空的页面

点击运行,可以看到:

注意事项
  1. QT头文件没有.h后缀
  2. QT一个类对应一个头文件,类名就是头文件名
  3. QApplication应用程序类
    3.1 管理图形用户界面应用程序的控制流和主要设置。
    3.2 是QT的整个后台管理的命脉它包含主事件循环,在其中来自窗口系统和其他资源的所有事件处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。
    3.3 对于任何一个使用QT的图形用户界面应用程序,都正好存在一个QApplication对象,而不论这个应用程序在同一时间内是不是有0,1,2或更多个窗口。
  4. .exec()
    程序进入消息循环,等待对用户输入进行响应。这里main()把控制权转交给QT,QT完成事件处理工作,当应用程序推出的时候exec()的值就会返回。在exec()中,QT接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。
信号和槽

信号槽,就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal),这种发出是没有目的的。
如果有对象对这个信号感兴趣,就会用连接函数(connect),也就是说,将想要处理的信号和自己的一个函数(槽(slot))绑定来处理这个信号。
当信号发出时,被连接的槽函数会自动被回调。
看一个栗子:

#include
#include

int main(int argc,char *argv[])
{
    QApplication app(argc,argv);
    QPushButton button("Quit");
    QObject::connect(&button,&QPushButton::clicked,&app,&QApplication::quit);
    button.show();
    return app.exec();
}

运行结果:

点击Quit,程序退出
connect()函数最常用的一般形式:

connect(sender,signal,receiver,slot);

参数:

  1. sender: 发出信号的对象
  2. signal: 发送对象发出的信号
  3. receiver: 接收信号的对象
  4. slot: 接收对象在接收到信号之后所需要调用的函数

信号槽要求信号和槽的参数一致,所谓一致,是参数类型一致。如果不一致,允许的情况是,槽函数的参数可以比信号的少,即便如此,槽函数存在的那
些参数的顺序也必须和信号的前面几个一致起来。这是因为,你可以在槽函数中选择忽略信号传来的数据(也就是槽函数的参数比信号的少),但是不能说信号根本没有这个数据,你就要在槽函数中使用(就是槽函数的参数比信号的多,这是不允许的)。

自定义信号槽

connect()函数可以让我们连接系统自带的信号和槽。QT同时允许我们自己设计的信号和槽。
(就像C++一样,允许我们直接调用系统内置的库函数,但同时也允许我们自定义函数)
实现一个报纸和订阅者的栗子:
有一个报纸类Newspaper,有一个订阅者类Subscriber。Subscriber可以订阅Newspaper。
这样,当Newspaper有了新的内容的时候,Subscriber可以立即得到通知。

#include 
// newspaper.h //
class Newspaper : public QObject
{
 Q_OBJECT
public:
 Newspaper(const QString & name) :
 m_name(name)
 {
 }
 void send()
 {
 emit newPaper(m_name);
 }
signals:
 void newPaper(const QString &name);
private:
 QString m_name;
};

首先是,newspaper类,继承QObject类。只有继承了QObject类的类,才具有信号槽的能力

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/656648.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号