Qt界面编程01

1、什么是Qt

Qt是跨平台 C++图形用户界面应用程序开发框架。主要用于开发GUI程序,它是面向对象的框架,使用C++语言封装的一些类库。

包:提供原码,供程序使用的现有代码,里面只提供一些简单功能、算法。

库:只提供一些头文件,源码已经被编译成二进制的xxx.so、xxx.a的文件,针对某类的功能提供了一套可供程序调用的函数、类。

框架:几乎所有的需要、功能,它都自己一整套的解决方案。

2、Qt的集成开发环境

1、Qt助手:Qt的帮助手册,里面包含了Qt中所有的类的说明使用方法。

2、Qt设计师:类似一个画图工具,可以通过画图的方式进行设计界面,它设计出的文件叫xxx.ui文件,可以使用uic 工具把它翻译成 xxx.h头文件,头文件中有关于界面的类。

3、Qt文本编辑器:主要用于编写代码工具。

4、Qt构建器:它负责把资源文件、界面文件、头文件、源文件组织在一起,生成编译脚本。

5、Qt调试器:它负责追踪Qt程序的执行过程,并且在程序执行过程去对程序进行调试。

3、Qt的HelloWorld
#include <QApplication>
#include <QLabel>
​
int main(int argc,char* argv[])
{
    QApplication app(argc,argv);
    
    QLabel lab("Hello,Qt!");
    lab.show();
    
    app.exec();
    return 0;
}
1、对代码的介绍

1、Qt的类名就是类的头文件名字

2、QApplication类对象负责给Qt界面程序构建一个运行环境。

3、QLabel是Qt中负责显示文字的控件,Qt中的所有控件默认都是隐藏的,需要调用show()成员函数来显示它们。

4、QApplication类对象的exec成员调用时,Qt程序才真正运行起来,加载界面。

2、构建、编译项目

1、构建项目脚本,qmake -project 命令 构建项目,该命令会根据当前目录的内容,自动生项目脚本,xxx.pro,如果想编译带界面的程序,需要在xxx.pro脚本中添加 QT += widgets 。

2、生成编译脚本,qmake 命令它会根据xxx.pro脚本中的内容自动生成Makefile编译脚本。

3、执行make命令,编译出可执行程序。

3、集成开发环境的使用介绍
1、使用集成开发环境编写Hello

1、打开qtcreator集成开发环境

2、文件->新建文件或项目->Application->Qt Widgets Application

3、输入项目名称,选择项目位置(不要有中文)

4、选择 编译方案 (最终编译出的程序在什么设备上执行)

5、设置主界面类名、源文件名、头文件名、界面文件名,一般都取同一个名字

6、Ctrl+R编译运行程序

2、常用的设置

1、显示、隐藏侧边栏,Alt+0

2、分栏进行拆分侧边栏,可选择项目,打开文档、类视图、大纲、文件系统。

3、编辑界面,前进、后退,选择要编辑的文件,选择符号,分栏,左右拆分、上下拆分。

4、工具->选项->文档编辑器,字体、字号、配色、缩进、代码风格。

3、常用的快捷键

1、选中一个类,F1 打开该类的帮助手册

2、选中一个对象,F2可以在声明与定义之间切换

3、F4,源文件与头文件之间切换

4、Ctrl+B,编译项目,检查代码是否有语法错误

5、Ctrl+F,查找或替换

6、Ctrl+i,格式化代码

7、Ctrl+/,注释、取消注释

8、Ctrl+L,跳转到指定的行

9、Ctrl+Tab,切换已经打开过的文件

10、Ctrl+滚轮,放大缩小代码

11、Ctrl+Shift+Up/Down,代码向下或向下移动

12、Ctrl+Shift+<>,折叠、取消折叠

13、Ctrl+单击,跳转到定义位置

14、Ctrl+Shift+R,批量修改变量名

15、Ctrl+Shift+S,保存所有文件

4、Qt帮助手册介绍

1、Header:该类需要包含的头文件

2、qmake:需要在xxx.pro 添加什么配置

3、Inherits:该类继承自那个类

4、Properties:具有protected访问属性的成员变量,父类、爷爷类中的protected访问属性的成员变量

5、Public Functions:具有public访问属性的成员函数,以及继承来的成员函数。

6、Public Slots:具有public访问属性的槽函数(可以与信号绑定的函数),以及继承来的槽函数。

7、Signals:该可以发出的信号,这类信号由Qt自己设计、维护,信号和槽机制是Qt最重要的特点。

8、Reimplemented Protected Functions:具有protected访问属性,可以被覆盖的虚函数,使用这种函数时,要搞明白,发生什么事件时,这些函数会被调用。

9、Additional Inherited Members:继承的成员的汇总。

10、Static Public Members:具有public访问属性的静态成员。

11、Macros:与该类相关的宏。

12、Detailed Description:对该类的详细介绍,示例代码。

5、Qt的窗口容器

在Qt中每个控件都可以是一个单独窗口,如果实现一个完善的窗口界面,就需要把若干个控件放置在一个窗口中,这种窗口叫做窗口容器。

1、QWidget

它是所以控件、窗口的基类,可以被嵌套(可以被当作子窗口),单独使用时有边框,被嵌套时没有边框,是一种比较干净的窗口容器。

2、QDialog

它继承了QWidget,具有对话功能的窗口,所有具有对话功能的控件都继承自它,比如提示类的弹窗,它可以获得用户的"选择"的结果,一般不它作为主窗口。

3、QMainWindow

它继承了QWidget,并且里面还默认嵌套了QWidget类对象,并且还包含了菜单栏、工具栏、状态栏,QMainWindow不能被嵌套,一般作为程序的主窗口。

4、如何把控件放置到窗口容器中
#include <QApplication>
#include <QMainWindow>
#include <QLabel>
​
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    // 创建窗口容器对象
    QMainWindow* mw = new QMainWindow;
    // 告诉控件谁是它父窗口
    QLabel lab1("Hello",mw);
    QLabel lab2("World",mw);
    // 窗口容器执行show里面的所有控件就都显示了
    mw->show();
​
    return a.exec();
}

注意:当控件放置到了窗口容器中,控件就不挨个show()了,只需要窗口容器show(),它里面的所有控件会全部显示。

5、控件、窗口的常用成员函数

Qt中使用直角坐标系的第四象限来对控件的位置进行布局,控件默认的显示位置是(0,0),可以使用move函数调用控件的位置,就是控件的左上角的点。

void move(int x, int y);
void move(const QPoint &);
功能:设置控件的位置
    
void resize(int w, int h);
void resize(const QSize &);
功能:设置控件的大小
    
void setGeometry(int x, int y, int w, int h);
void setGeometry(const QRect &);
功能:设置控件的位置和大小
    
int x() const;
功能:获取控件在窗口的x轴坐标
int y() const;
功能:获取控件在窗口的y轴坐标
    
QPoint pos() const;
功能:获取控件在窗口的x、y坐标
    
int width() const;
功能:获取控件的宽度
int height() const;
功能:获取控件的高度
QSize size() const;
功能:获取控件的高度和宽度
QRect rect() const;
功能:获取控件的位置和大小
    
const QFont &font() const;
功能:获取该控件所显示的文件的字体
    
void setFont(const QFont &);
功能:设置该控件所显示的文件的字体
    
void show();
功能:显示控件
void hide();
功能:隐藏控件
    
void setText(const QString &);
功能:设置控件上要显示的文字
​
QString text() const;
功能:获取控件上的文字
    
void clear();
功能:清除控件上显示的内容

6、Qt中的字符串和输出调试、容器

1、Qt中封装了QString字符串类,它包含C++中string类的所有功能,并且它还有一系列的toXXX函数,注意:我们从界面上获取到的所有数据都是QString类型的字符串。

2、Qt中输出调试信息可以使用方法有:

1、printf/cout还可以继续使用,需要加头文件和名字空间,如果不是在终端运行,它们输出的数据不会立即显示在集成开发环境,而是等程序结束才显示出来。

2、qDebug函数,它既可以像printf一样使用,也可以像cont一样使用(需要加头文件)。

#include <QDebug>
...
qDebug("\n%s\n",lab1.text().toStdString().c_str());
qDebug() << lab1.text();

3、Qt中继承并扩展了STL模板库中的容器

#include <QVector>
#include <QList>
#include <QMap>
#include <QStack>
#include <QQueue>
#include <QSet>
7、信号和槽机制

1、当Qt的程序执行后,默认只有一个进程,进程中只有一个线程,该线程主要负责监听、用户的鼠标、键盘等操作,无法去执行其它的代码,与C、C++的终端程序顺序流程不同。

2、当用户点击了鼠标、敲击了键盘,Qt的控件就是发出一些信号,这些信号可以预先绑定一些函数,当发射信号后,Qt会自动调用绑定的函数。

3、Qt把可以与信号绑定的类成员函数叫作槽函数,可以被手动调用像普通函数一样执行,也可以与信号绑定。

4、信号与槽函数绑定的方法:

QObject::connect(const QObject * sender, const char * signal, const QObject * receiver, const char * method)
注意:QObject是所有Qt类的基类,connect函数是QObject的静态成员函数。
    
sender:信号的发出者,必须是继承了QObject的子类
signal:发出的信号,必须是sender成员
receiver:信号的接收者,必须是继承了QObject的子类
method:要执行的槽函数,必须是receiver的成员
    
SIGNAL()宏函数,它负责信号转换成字符串
SLOT()宏函数,它负责把槽函数转换成字符串
    
注意:在connect时候不要手动填写信号和槽函数,因为编译器根本不会检查你写的是否正确,因为connect函数要的是信号槽函数的字符串,所以尽量使用工具的自动提示功能。
#include <QApplication>
#include <QPushButton>
#include <QLabel>
​
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QPushButton btn("我是个按钮");
    btn.show();
    QLabel lab("我是个标签");
    lab.show();
​
    QObject::connect(&btn,SIGNAL(clicked()),&lab,SLOT(clear()));
​
    return a.exec();
}

8、自定义信号和槽

1、槽函数必须是类成员函数,并且必须继承QObject类或者是QObject的子类。

2、在类的最前面必须有 Q_OBJECT 关键字,如果第一次编译时忘记写了,之后再添加依然会出错,解决方法就是重新构建该项目(把所有自动生成的文件全部删除)。

3、在槽函数前面必须有 public slots: 关键字。

4、像普通成员函数一样去实现槽函数,槽函数内不要执行耗时的操作,因为执行槽函数时,界面是无法操作的。

5、创建类对象,与信号绑定。

6、在signals:关键字后面进行声明信号。

7、使用 emit 信号() 发射信号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值