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

QT学习笔记(包括一些杂记) 持续更新

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

QT学习笔记(包括一些杂记) 持续更新

QT学习笔记 0x零碎概念

项目文件含义

QT += core gui
//Qt包含的模块 core和gui模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
大于Qt4版本以上的包含widgets模块
ConFIG += c++11
SOURCES +=
main.cpp
widget.cpp
资源文件
HEADERS +=
widget.h
头文件
FORMS +=
widget.ui
UI

Qt5模板

Widgets 窗口模块
Core 核心模块
GUI 图形模块

Network 网络模块
Mulitmedia 多媒体模块

=========================================================

00命名规范及快捷键

=========================================================

01创建一个按钮

包含头文件 #include

创建一个按钮QPushButton * btn = new QPushButton;

但是此时并不会显示,需要btn->show();此时的窗口会独立显示

show以顶层方式弹出窗口控件

让btn对象 依赖在myWidget窗口中btn->setParent(this);
this是指向当前对象的指针
显示文本btn->setText("第一个按钮");

建立按钮的第二个重载方式

可以直接在创建的时候建立文本和依赖的父类QPushButton *btn2 = new QPushButton("第二个按钮”,this);

这样创建有一个弊端:按照控件的大小创建窗口
移动按钮

btn2->move(int x ,int y);移动到x,y坐标处

02窗口 重置窗口大小

void resize(int w, int h);

e.g.resize(600,400);即可以重置窗口大小为600x400

设置窗口标题

设置标题setWindowTitle("第一个窗口");

固定窗口大小

setFixedSize(600,400);固定窗口大小为600x400

打印信息

头文件#include
行为qDebug() << "信息打印" ;

=========================================================

03对象树


构造时,从上至下开始构造,析构时,从下至上开始析构。
但是在打印时,先打印父类析构,再打印子类析构。析构是逆序打印,构造是顺序打印,但析构顺序和构造的顺序未变。

04Qt坐标系(简单)

以左上角为(0,0),x向右增加,y向下增加

05信号与槽

创建了按钮,但是点击按钮没有任何反应
如果我们想要点击按钮执行一个窗口关闭的操作

说白了,05的内容就是告诉一个按键该干嘛干嘛,然后那个按键干事情的动作叫做槽(???)

=========================================================
信号槽的优点,松散耦合,信号发送端和信号接收端本无关联。通过一个connect链接 将两端 耦合在一起。

=========================================================

自定义信号和槽
自定义的信号,写在signals下
返回值是void,只需要声明,不需要实现
可以有参数,可以重载

在早期的Qt中,槽函数必须写在头文件的public slots下
而之后的版本里面槽函数可以写在public或者全局函数
槽函数:
返回值是void,需要声明,也需要实现
可以有参数,可以重载
001案例

例如 下课时,老师饿了,学生请吃饭的案例

老师饿了是信号,学生请吃饭是槽,老师是信号发出者,学生是信号接收者,下课是触发条件

那么可以建立老师和学生的头文件,分别写入自定义信号void hungry();和自定义槽void treat();

其中,自定义槽需要写实现(自定义信号只需要写声明)
于是在Student.cpp中写入

void Student::treat(){
    qDebug() <<"请老师吃饭";
}

然后需要在MyWidget头文件中创建学生和老师类,并且声明触发条件函数void classISOver();

在MyWidget.cpp中写入classISOver的实现

void MyWidget::classISOver(){
    //下课函数,调用后触发老师饿了的信号
    emit zt->hungry();
}

emit是激活的意思

最后在窗口构造函数中写入执行顺序就行(顺序不可以乱):
1.创建老师类和学生类的对象
2.链接两者
3.调用触发函数

//创建一个老师对象,创建一个学生对象
this->zt = new Teacher(this);
this->st = new Student(this);
//链接两个对象,老师饿了,学生请客
connect(zt,&Teacher::hungry,st,&Student::treat);

classISOver();//触发下课
后面是一些杂记 如何制作一个非模态窗口

模态和非模态简单的说就是一个新的窗口打开之后还能不能操作旧的窗口,模态是不能操控,而非模态是可以操控

在Qt中调用setWindowModality()函数
在这个函数里面包含了三个可以调整模态方式的参数

Qt::NonModal ❀The window is not modal and does not block input to other windows.
非模态对话框
Qt::WindowModal ❀The window is modal to a single window hierarchy and blocks input to its parent window, all grandparent windows, and all siblings of its parent and grandparent windows.
窗口级模态对话框,即只会阻塞父窗口、父窗口的父窗口及兄弟窗口。(半模态对话框)
Qt::ApplicationModal ❀The window is modal to the application and blocks input to all windows.
应用程序级模态对话框,即会阻塞整个应用程序的所有窗口。(半模态对话框)


这个是一个非模态窗口,创建之后在旧窗口和新窗口都可以进行操作

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

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

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