QT快速上手_笔记二

6 篇文章 0 订阅

2.1 UI

2.1.1 三个基类

这三者一般都是顶层窗口部件(没有父窗口)。

  • widget右上角是缩小放大和退出,是很多简单应用窗口的顶层窗口。
  • mainwindow可以设置的是带有菜单和工具栏的顶层窗口,什么是菜单工具栏呢?你可以打开你的word文档看看,左上角有文件,开始,插入等等的是菜单栏,有一些图标则是工具栏。
  • dialog右上角是问号和关闭,它主要用来和用户进行简单交互,比如你安装一个软件会让你点下一步下一步继续安装的,很多是dialog。
2.1.2 ui 指针可以访问可视化设计的界面组件
2.1.3 layout
  • 对于存在Layout(布局)方式的Widget(窗口),setGeometry()函数只能设置(x,y),在设置宽高上不起作用,需改用setFixedSize()函数;
  • 先定义控件的最小size,再放进layout里。button->setMinimumSize(200,100); hLayout1->addWidget(button);

2.2 Qt 之 QStackedWidget(多页面切换)

setCurrentIndex 为共有槽函数,设置索引index所在的页面为当前页面
一般情况,常用的两种方式:
根据currentWidget()来判断当前页面,然后通过setCurrentWidget()来设置需要显示的页面。
根据currentIndex()来判断当前页面索引,然后通过setCurrentIndex()来设置需要显示的页面

2.3 qt布局不随窗口变化

只需要点空白处,然后给对象指定一个布局,水平或者垂直即可

2.4 QAbstractItemView类

QAbstractItemView类提供项目视图类的基本功能。
QAbstractItemView类是一个基类,它为每个标准视图,使用QAbstractItemModel。QAbstractItemView是一个抽象类并且本身不能被实例化。它和模型通过信号和槽机制为互操作提供了一个标准接口,使子类来保持最新的与他们的模型的变化。该类提供了键盘和鼠标导航,视图滚动,编辑项目和选择的标准支持

2.5 构造函数头部1

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)

其意义是:执行父类 QWidget 的构造函数,创建一个 Ui::Widget 类的对象 ui。这个 ui 就是 Widget 的 private 部分定义的指针变量 ui。

2.6 多线程

2.6.1 QThread

方法1步骤:

  • a1 新建一个类MyThread,基类为QThread。
  • a2 重写类MyThread的虚函数void run();,即新建一个函数protected void run(),然后对其进行定义。
  • a3 在需要用到多线程的地方,实例MyThread,然后调用函数yThread::start()后,则开启一条线程,自动运行函数run()。
  • a4 当停止线程时,调用MyThread::wait()函数,等待线程结束,并且回收线程资源。

注:调用后会执行run()函数,但在run()函数执行前会发射信号started()
方法2步骤(moveToThread):

  • a1 新建一个QObject的派生类Myclass
  • a2 搞定signal和slot
  • a3 实例一个QThread thread,实例一个Myclass myclass
  • a4 myclass.moveToThread(&thread)
  • a5 connect
  • a6 thread.start()
2.6.2 concurrent

2.7 TextEdit区别

  • QLineEdit是单行文本输入,一般用于用户名、密码等少量文本交互地方。
  • QTextEdit用于多行文本,也可以显示HTML格式文本。QTextEdit多用于显示
  • QPlainTextEdit与QTextEdit很像,但它多用于需要与文本进行处理的地方,而QTextEdit多用于显示,可以说,QPlainTextEdit对于plain text处理能力比TextEdit强。(比如文本编辑器就用Qplain Text Edit)

2.8processEvents函数

主要是将正在处理的事件的控制权还给Qt,通俗点来说就是,正在干的事情太耗时间了,加了processEvents函数后,会把这个耗时间的东西踢出来,自己一个去慢慢耗

2.9 原子操作

"原子操作(atomic operation)是不需要synchronized

2.10 哈希表

2.11 阻塞非阻塞 异步同步

阻塞得到结果此线程前不能去做别的事调用结果返回前线程的状态
非阻塞得到结果前可以去干别的事
同步得到的结果方式是主动等待的消息通知机制
异步得到结果的方式是被动通知(回调)的

2.12 mutex互斥锁

QMutex  mutex;
QWaitCondition  newdataAvailable;
 ···
newdataAvailable.wait(&mutex);//  <<---本句意思

其实是解锁mutex,newdataAvailable进入等待,阻塞唤醒条件,等到唤醒之后重新锁定mutex,然后退出阻塞,再执行之后的代码

2.13 信号量

一个互斥量只能被锁定一次,但是信号量可以多次使用
QSemaphore

2.14 信号与槽

2.14.1

connect的第五个参数有几个枚举类型

  • AutoConnection 自动连接
    发出信号的线程。。。
  • DirectConnection 直连
    可以理解为该信号的槽函数就在emit发射信号的时候一起调用了,所以是和信号发射这个线程同一个线程
  • QueuedConnection 队列
    槽函数在接收对象的生存线程里,和发射信号的线程并没有关系
    比如有多个信号发射,不想每个信号发射完就执行相关的槽,而是等所有信号全部发射完在执行所有的槽函数,就可以用队列连接,这个时候就要等到进入事件循环里面才会开始执行槽。

2.14.2 不同类间的连接

不同类之间信号与槽的对应,需要三个步骤:
1)在类A里定义发射信号,使用emit()方法,发射信号A_signal();

2)在类B里定义槽函数B_slot();

3)在主函数main()里,使用类A、B分别实例化两个对象a、b。

然后使用connect(a, QtCore.SIGNAL(‘A_signal()’), b.B_slot)

2.15 事件循环

  • 事件循环一般用exec()函数开启。QApplicaion::exec()、QMessageBox::exec()都是事件循环。其中前者又被称为主事件循环。
  • 事件循环首先是一个无限“循环”,程序在exec()里面无限循环,能让跟在exec()后面的代码得不到运行机会,直至程序从exec()跳出。从exec()跳出时,事件循环即被终止。QEventLoop::quit()能够终止事件循环。
  • 其次,之所以被称为“事件”循环,是因为它能接收事件,并处理之。当事件太多而不能马上处理完的时候,待处理事件被放在一个“队列”里,称为“事件循环队列”。当事件循环处理完一个事件后,就从“事件循环队列”中取出下一个事件处理之。当事件循环队列为空的时候,它和一个啥事也不做的永真循环有点类似,但是和永真循环不同的是,事件循环不会大量占用CPU资源。
  • 事件循环的本质就是以队列的方式再次分配线程时间片

2.16 TCP通信

网络监听:网络监听是一种监视网络状态、数据流程以及网络上信息传输的管理工具,它可以将网络界面设定成监听模式,并且可以截获网络上所传输的信息,不过只能应用于连接同一网段的主机
socket:套接字Socket=(IP地址:端口号),通信时其中一个网络应用程序将要传输的一段信息写入它所在主机的 Socket中,该 Socket通过与网络接口卡(NIC)相连的传输介质将这段信息送到另外一台主机的 Socket中,使对方能够接收到这段信息。 Socket是由IP地址和端口结合的,提供向应用层进程传送数据包的机制

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值