qt的基本使用

1.初步了解:
创建项目:

(Widgets是部件的意思)Widgets Application 部件应用程序

(文件路径不能存在中文)

 

基类:
MainWindow 主要用于PC端(windows,带菜单栏)
QWidget 控件的基类
QDialog 对话框

了解一下:
父类 || 子类
基类 || 派生类

会生成一个 class MyWidget : public QWidget (MyWidget继承窗口基类QWidget)

接着下一步,完成


编译运行的方法:
图中的箭头。
快捷键: ctrl+r


.pro为项目文件

#-------------------------------------------------
#
# Project created by QtCreator 2019-06-04T18:33:58
#
#-------------------------------------------------

#模块,找模块,头文件按F1
QT += core gui

#为了兼容QT4以前的版本
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

#应用程序的名字
TARGET = day_011
#指定makefile的类型,app,不用管
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0

//源文件 .cpp文件
SOURCES += \
main.cpp \
mywidget.cpp
//头文件 .h文件
HEADERS += \
mywidget.h



右键点击.pro文件→在Explorer中显示

自动生成build…

.h头文件
会生成类MyWidget

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

class MyWidget : public QWidget //光标对着QWidget,按F1跳到官方对应的文档
{
Q_OBJECT //构造的函数,按F4可以看到对应的.cpp是空的
//信号与槽的时候需要

public:
MyWidget(QWidget *parent = 0);
~MyWidget();
};

#endif // MYWIDGET_H




main.cpp 主函数
#include "mywidget.h"
//QApplication应用程序类
#include <QApplication>

int main(int argc, char *argv[])
{
//有且只有一个应用程序类的对象
QApplication a(argc, argv);
//MyWidget继承于QWidget,QWidget是一个窗口基类
//所以MyWidget也是一个窗口类
//w就是一个窗口
MyWidget w;

//窗口默认是隐藏的,要显示出来
w.show();

//等于a.exec();return 0;
//作用让程序一直执行,等待用户操作
//等待事件发生
return a.exec();
}

主要框架:
#include <QApplication>

int main(int argc, char *argv[])
{

QApplication a(argc, argv);
//我们写的代码
return a.exec();
}




QT头文件的特点:
Qt头文件没有.h
头文件和类名一样
前两个要大写

QT的模块:


2.进一步了解:
创建空项目:

只生成一个项目文件(空的)

添加新文件

名字main.cpp

#include <QApplication>
#include <QWidget> //窗口控件基类
#include <QPushButton>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget w;
w.setWindowTitle(QString("标题")); //设置标题

/*如果不指定父对象,对象和对象(窗口和窗口)没有关系,独立
* a指定b为它的父对象,a放在b的上面
* 指定父对象,有2种方式:
* 1)setParent
* 2)通过构造函数传参
* 指定父对象,只需要父对象显示,上面的子对象自动显示
*/

QPushButton b;
b.setText("-_-"); //给按键设置内容
b.setParent(&w); //指定父对象
b.move(100,100); //移动坐标

QPushButton b1(&w);
b1.setText("abc");

w.show();
return app.exec();



运行结果如图:


这个可以改编译环境。

3.信号和槽
创建一个新的项目:
main.cpp不改变它

#include "mainwidget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv); //会执行到这句话
MainWidget w; //执行MainWidget的构造函数,所以我们的main.cpp永远不用改
w.show();

return a.exec();
}

点击工具→选项

用UTF-8

mainWidget.h文件:

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>

class MainWidget : public QWidget
{
Q_OBJECT

public:
MainWidget(QWidget *parent = 0);
~MainWidget();

private: //加上了这个
QPushButton b1;
QPushButton *b2;
};

#endif // MAINWIDGET_H


来到mainWidget.cpp

#include "mainwidget.h"
#include <QPushButton>


MainWidget::MainWidget(QWidget *parent)
: QWidget(parent)
{
b1.setParent(this); //添加按键b1
b1.setText("-_-");
b1.move(100,100);

b2 = new QPushButton(this); //指针要开内存,添加按键b2
b2->setText("---");
}

MainWidget::~MainWidget()
{

}



下面,我们开始为按钮设置功能:
重点:信号和槽
查看库函数
将光标指向头文件QPushButton,按两下F1


点基类 QAbstractButton


点了有对信号的描述。

按esc退出。

在上面的mainWidget.cpp文件中加上connect(&b1, &QPushButton:: pressed, this, &MainWidget:: close);
即可实现按下关闭窗口。
光标移到close按F1

[slot] 代表槽

来看个例子:
首先,.h文件

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>

class MainWidget : public QWidget
{
Q_OBJECT

public:
MainWidget(QWidget *parent = 0);
~MainWidget();

void mySlot();//加了个定义函数
private:
QPushButton b1; //定义变量
QPushButton *b2; //定义变量
};

#endif // MAINWIDGET_H



main.cpp文件不变
mainWidget.cpp文件

#include "mainwidget.h"
#include <QPushButton>//按F1.再按F1


MainWidget::MainWidget(QWidget *parent)
: QWidget(parent)
{
b1.setParent(this);
b1.setText("close");
b1.move(100,100);

b2 = new QPushButton(this);
b2->setText("---");

connect(&b1, &QPushButton:: pressed, this, &MainWidget:: close);
/* &b1:信号发出者,指针类型
* &QPushButton:: pressed:处理的信号, &发送者的类名::信号名字
* this:信号接收者
* &MainWidget:: close: 槽函数,信号处理函数,&接收者类名::槽函数名字
*/
/*自定义槽
* Qt5任意的成员函数,普通全局函数,静态函数
* 槽函数需要和信号一致(参数,返回值)
* 由于信号都是没有返回值,所以,槽函数一定没有返回值
*/
//按下b2时,b2内容变成123
connect(b2, &QPushButton::released, this, &MainWidget::mySlot);
//松开b2时,b1消失
connect(b2, &QPushButton::released, &b1, &QPushButton::hide);

/*信号,短信
* 槽函数,接受短信的手机
*/
}

void MainWidget::mySlot(){ //自定义函数
b2->setText("123");
}

MainWidget::~MainWidget()
{

}

 

posted @   stdrush  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
历史上的今天:
2022-04-23 今日总结:项目活动被摧毁时,保存上次的数据 (android stdio)
点击右上角即可分享
微信分享提示