【QT】状态栏、任务栏、工具栏
菜单栏、工具栏、状态栏主窗口框架(QMainWindow)拥有自己的布局,包括以下组件:
菜单栏
菜单栏包含了一个下拉菜单项的列表,这些菜单项通过QAction动作类实现。一个主窗口只能有一个菜单栏。
工具栏
工具栏一般用于常用的菜单项,也可以插入其他窗口部件,一个主窗口可以拥有多个工具栏。
中心部件
主窗口中心区域可以放入一个窗口部件作为中心部件,是应用程序的主要功能实现区域,一个主窗口只能有一个中心部件。
dock部件
dock部件又称为停靠部件,或停靠窗口,可停靠在窗口部件的四周,用来设置一些部件来实现一些功能,类似一个工具箱,一个主窗口可拥有多个dock部件。
状态栏
状态栏用于显示程序的一些状态信息,在主窗口的最底下,一个主窗口只能拥有一个状态栏。
菜单栏、工具栏、状态栏 代码添加示例。
12345678910111213141516171819202122232425262728293031323334353637383940414243//菜单 QMenu* editMenu = ui->menuBar->addMenu("编辑( ...
【QT】QT打印调试信息
123456789101112131415161718//QDebug打印调试信息 int num = 20; qDebug("十进制%d",num); qDebug("八进制%o",num); qDebug("十六进制%x",num); qreal PI = 3.14; qDebug("浮点%f",PI); qDebug("科学计数法%e",PI); qDebug("123%%");//123% //另一种输入方式 qDebug()<<PI; QString str = "Hello world"; qDebug()<<str; qDebug().noquote()<<str;//不带双引号输出 qDebug()<<"hello"<<"world";//默认输入,这两个单词中间会有空格 q ...
【QT】QT文件处理
文件处理QFile类用于文件操作,它提供了读写文件的接口,可以读写文件、二进制文件和Qt资源文件。
处理文本文件和二进制文件,可以使用QTextStream类和QDataStream类。处理临时文件可以使用QTemporaryFile,获取信息可以使用QFileInfo,处理目录可以使用QDir,监视文件和目录变化可以使用QFileSystemWatcher。
QFile类示例
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#include <QCoreApplication>#include<QFile>#include<QDebug>int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); //文件读取 QFile file("hello.txt"); if(file.open(QIODevice ...
【QT】正则表达式
QT正则表达式正则表达式即一个文本匹配字符串的一种模式。Qt中QRegExp类实现使用正则表达式进行模式匹配,且完全支持Unicode,主要应用:字符串验证、搜索、查找替换、分割。
正则表达式中字符及字符集
正则表达式中的量词
正则表达式中的断言
QRegExp支持通配符
示例:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859//完整匹配 QRegExp reg("a"); qDebug()<<reg.exactMatch("a"); //任意个数字+两个非数字 QRegExp reg0("\\d*\\D{2}"); qDebug()<<reg0.exactMatch("123ab"); //使用通配符匹配 QRegExp rx("*.txt&qu ...
【QT】QT标准对话框
QT标准对话框
示例:
消息框
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788#include "msgboxdlg.h"#include<QMessageBox>MsgBoxDlg::MsgBoxDlg(QWidget* parent ):QDialog(parent){ setWindowTitle("标准信息对话框集合"); //构造部件 m_tipLabel = new QLabel("请选择一种消息框"); m_questionBtn = new QPushButton("问题消息框"); m_infomationBtn= new QPushButton(& ...
【计算机网络】计算机网络基础知识笔记
相关视频——计算机网络微课堂(有字幕无背景音乐版)
前言因特网概述网络、互联(连)网和因特网
网络是由若干结点和连接这些结点的链路组成的。
多个网络还可以通过路由器互联起来,这样就构成了一个范围更大的网络,即互联网。因此,互联网是网络的网络。
因特网是世界上最大的互连网络。
internet与Internet
interne互联网是一个通用名词,它泛指由多个计算机网络互连而成的网络。在这些网络之间的通信协议可以是任意的。
Internet因特网则是一个专用名词,它指当前全球最大的、开放的、由众多网咯相互连接而成的特定计算机网络,它采用TCP/IP协议族作为通信的规则,前身是美国的ARPANET。
因特网发展的三个阶段
因特网服务提供者ISP
Internet Service Provider
基于ISP的三层结构的因特网
因特网的标准化工作面向公众。
因特网协会ISOC。
因特网的组成
边缘部分
由所有连接在因特网上的主机组成,这部分是用户直接使用的,用来通信(传送数据、音频或视频)和资源共享。
核心部分
由大量网络和连接这些网络的路由器组成。这部分是边缘部 ...
PicGo+Gitee搭建图床的注意事项
刚才想把Gitee图床换成Github来托管,无奈失败了,加上Gitee访问速度更快一些,那就不瞎搞了,随便写一下,具体的搭建过程还请见其他作者的教程。
我选的是这个插件。
owner只包括你的Gitee用户名,repo只包括你的仓库名,具体的名字从链接里面看,例如:
我的Typora设置。
粘贴图片会自动上传到Gitee中,并且弹出”上传完成的提示”。
【Python】Python基础语法(1)
Python基础知识相关视频——Python爬虫编程基础5天速成(2021全新合集)Python入门+数据分析
前言
Python是一门解释型、面向对象的高级编程语言。
Python是开源免费的,支持交互式、可跨平台移植的脚本语言。
Python的设计混合了传统语言的软件软件工程的特点和脚本语言的易用性。
具有如下特性:
开源、易于维护
可移植
易于使用、简单优雅
广泛的标准库、功能强大
可扩展、可嵌入
……
变量
注释
123456多行注释``````单行注释#
变量无需先定义,直接使用即可
1234a = 'ABC'Python解释器干了两件事1在内存中创建了一个'ABC'的字符串2在内存中创建了一个名为a的变量,并把它指向'ABC'
print
123占位符——格式化输入age = 3print("我今年%d岁了",age)
input——进行输入
type(变量名)查看变量的类型
强制类型转换——变量类型(变量)
**——次方
条件判断语句1234567c = in ...
【QT】QT容器
QT容器QString类隐式共享:
隐式数据共享机制去最大化资源有效利用和最小化复制克隆操作。
隐式数据共享类当作为函数参数传递的时候,不仅安全而且效率很高,因为传递的时候只是传递了数据的指针,数据本身只当自己被修改的时候才会去复制。简称写时复制。
数据相同时,执行浅拷贝,仅复制指向数据块的指针,数据不同时则执行深拷贝。
隐式共享技术可以大大降低对内存的开销以及,CPU资源的消耗,很大程度提高应用程序的运行效率。
QString类保存了16位的Unicode值(宽字节),Unicode把所有语言都统一到一套编码里,Unicode提供UTF-8、UTF-16、UTF-32编码方式。
UTF-8以字节为单位对Unicode进行编码,对不同范围的字体使用不同长度的编码。对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同。
代码示例
12345678QString s = "Hello";//Hello数据块引用计数为1QString s1 = s;//Hello数据块引用计数为2QString s2 = s;//Hello数据块引用计数为3//其中一 ...
【QT】QT布局管理器
布局管理器
设计模式实现布局
详情见工具栏
垂直布局,水平布局,打破布局。
代码实现布局
main.cpp
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071#include "testlayout.h"#include <QApplication>#include<QLabel>#include<QLineEdit>#include<QFormLayout>#include<QRadioButton>#include<QVBoxLayout>#include<QPushButton>#include<QSpacerItem>int main(int argc, char *argv[]){ QApplication a(argc, argv ...
【QT】QT窗口部件
QT窗口部件默认部件基类QT提供的默认部件基类包括QMainWindow、QWidget、和QDialog,这三个部件基类也是用的最多的。
QMainWindow是带有菜单栏、工具栏、状态栏的主窗口类,它有自己单独的布局。布局有一个中心区域,通常是标准的QT部件,也可以是定制的部件,且必须有一个中心小部件。setCentralWidget()方法可设置中心部件。
QWidget类是所有部件对象的基类,被称为基础窗口部件。
QWidget提供自我绘制和处理用户输入等基本功能,如接收鼠标、键盘和其他事件,并且在屏幕上绘制自己的表现。每一个窗口部件都是矩形的,并且它们是按照**Z轴(由屏幕里到屏幕外)**顺序排列的。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。一个没有父窗口部件的窗口部件一直是顶级窗口部件。非顶级窗口部件时父窗口的子部件。
QWidget构造函数有两个参数:QWidget*parent = 0,QT:WindowFlages f = 0。
parent即父窗口,默认为0,即没有父窗口,是顶级窗口,如果指定parent值,则当前窗体将会是一个子部件。QT:W ...
【QT】QT对象树
QT对象树QT提供了对象树机制,能够自动、有效的组织和管理继承自QObject的对象。
每个继承自QObject类的对象通过它的对象链表(QObjectList)来管理子类对象,当用户创建一个子对象时,其对象链表相应更新子类对象的信息,对象链表可通过children()获取。
当父类对象析构的时候,其对象链表中的所有(子类)对象也会被析构,父对象会自动,将其从父对象列表中删除,QT保证没有对象会被delete两次。开发中手动回收资源时建议使用deleteLater代替delete,因为deleteLater多次是安全的。
派生于QObject的类,申请资源的时候,我们可以不用过分的去关注资源回收情况,因为当该基类销毁回收时,子类也会一起销毁回收。
当某一个子类进行销毁的时候,如果它也有子类,对应的子类也会销毁回收。
【QT】元对象系统
QT元对象系统(Meta-Object-System)元对象系统元对象系统是一个基于标准C++的扩展,为QT提供了信号与槽机制、实时类型信息、动态属性系统。
元对象系统的三个基本条件:类必须继承自QObject、类声明Q_OBJECT宏(默认私有)、元对象编译器moc。
信号与槽机制是QT的核心机制,信号与槽是一种高级接口,应用于对象之间的通信。信号和槽是QT自行定义的一种通信机制,它独立于标准的C/C++语言,要正确的处理信号和槽,必须借助一个称为moc(Meta-Object-Compiler),也就是”元对象编译器”。
它为高层次的事件处理自动生成所需要的必要代码。QT程序在交由标准编译器编译之前,先要使用moc分析C++源文件。如果moc发现在一个类头文件中包含了函Q_OBJECT,则会生成以moc_className.cpp(自定义类名)的.cpp文件。这个源文件中包含了Q_OBJECT宏的实现代码。新的文件同样将进入编译系统,与源文件一起参与编译。构建生成的.o文件包含与moc生成的.cpp文件中。
信号与槽产生的历史背景:
GUI用户界面中,当用户操作一个窗口部件时,需 ...
【QT】自定义软件打包发布
自定义软件打包发布
安装nisi和nisedit。
打开nisedit。
点击——文件——新建脚本:向导。
设置名称等信息,点击下一步。
选择安装图标——设置安装语言,点击下一步。
选择授权文件(License.txt,里面的内容自定义。)点击下一步。
选择你的程序相关文件,删掉默认的两个。
点击添加文件,注意其中部分文件的路径。
其中要注意的路径,就是带有文件夹的,如下图所示。
添加完成,选中.exe文件,点击下一步。
默认,点击下一步。
选择自述文件,点击下一步。
设置相关文字消息提示,以及图标。点击下一步。
将三个选项都勾上,点击完成。
保存文件,打包完成。
补充:windeployqt补全相关库有可能补的不全,需要手动补充。
windeployqt ExamSys.exe
找不到命令添加环境变量。D:\QT5.9.6\5.9.6\mingw53_32\bin
完成。
【MFC】MFC文件操作和注册表操作
MFC文件和注册表的操作日志、操作配置文件、ini文件、注册表、音视频的文件存储。
Linux下一切皆文件。
C/C++文件操作常量指针和指针常量const char* p == char const *p 常量指针,表示指向的内容为常量,指针的指向可以修改,指针指向的内容不能修改。
char* const p 指针常量,表示地址是常量,指向不能改变,指向的内容可以改变。
C语言文件操作文件打开的模式
示例:
1234567891011121314151617181920212223242526272829303132333435363738394041424344//写文件void CMFCFileView::OnFileWrite(){ FILE* pFile = NULL; //打开文件 errno_t err = _wfopen_s(&pFile,_T("1.txt"),_T("w")); if (!err) { } else { TRACE("Open Fail E ...
【操作系统】动态链接库
动态链接库DLL就是整个windows操作系统的基础。动态链接库不能直接运行,也不能接收消息。他们就是一些独立的文件。
Windows API中的所有函数都包含在DLL中。
其中三个最重要的DLL
Kernel32.dll——它包含用于管理内存、进程和线程的各个函数:CreateThread
User32.dll——它包含用于指定用户界面任务(如窗口的创建和消息的传送)的各个函数
GDI32.dll——它包含用于画图和显示文本的各个函数
静态库和动态库静态库:函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其他模块组合起来创建最终的可执行文件(.EXE文件)。
动态库:在使用动态库的时候,往往提供提供两个文件:一个引入库(静态库)(LIB)和一个DLL。引入库包含被DLL导出的函数和变量的符号名,DLL包含实际的函数和数据。在编译链接可执行文件时,只需要链接引入库,DLL中的函数代码和数据并不复制到可执行文件中,而是在运行时候,再去加载DLL,访问DLL中导出的函数。
使用动态 ...
【操作系统】进程间的通信
进程程序是计算机指令的集合,它以文件的形式存储在磁盘上。
进程通常上被定义为一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活动,一个程序可以对应多个进程。
进程是资源申请,高度和独立运行的单位,因此,它使用系统中的运行资源,而程序不能申请使用系统资源,不能被系统高度也不能作为独立运行的单位,因此它不占系统运行资源。
进程的组成
操作系统用来管理进行的内核对象
内核对象也是系统用来存放关于进程的统计信息的地方,内核对象是操作系统内部分配的一个内在块,该内存块是一种数据结构,其成员负责维护该对象的各种信息。
地址空间
它包含所有可执行模块或DLL模块的代码和数据,另外,它也包含动态内存分配的地址空间,例如线程的栈和堆分配空间。
进程从来不执行任何东西,它只是纯粹的容器,或说是线程的执行环境。
若要使它完成某项操作,它必须拥有一个在它环境中运行的的线程,次线程负责执行包含在进程的地址空间中的代码,也就是,真正完成代码执行的线程。
子进程子进程还是一个进程,指的是由另一个进程(对应称之为父进程)所创建的进程。
单任务的同步机制——线程、子进程都可以实现。
需要保护 ...
【操作系统】多线程之线程同步
多线程基本概念
线程是CPU调度和分派的基本单位。
进程
是分配资源的基本单位。
等同于正在运行的程序以及它所管理的资源。
创建线程
CreateThread——Windows中创建线程API
baginthreadex——底层实现是CreateThread
示例1:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253#include<stdio.h>#include<windows.h>#include<process.h>unsigned int __stdcall thread_main_dog(void* cnt){ int i = *((int*)cnt); for (int j = 0; j < i; j++) { printf("www\n"); Sleep(1000); ...
宏碁暗影骑士擎安装双系统踩坑记录
宏碁暗影骑士擎安装Ubuntu 20.04.3 + Windows10
本文用来记录笔者前两天安装双系统所遇到的问题,解决的困难只局限于宏碁暗影骑士擎,其它电脑没准不适用。
安装视频推荐——Windows 和 Ubuntu 双系统安装指南,这个up主讲的很详细,跟着视频一步一步做就可以。
我的U盘用Win32DiskImager写入镜像之后提示需要格式化才能打开,所以我用的是rufus,这个问题该视频评论下面有人提到。
安装Unbuntu时提示,turn off rst,开机猛按F2进入bios设置,在main界面按ctrl+s,进入bios高级设置,将sata mode 修改为ahci,即可完成正常安装。
安装完成之后发现无法正常进入win10,因为修改了sata mode,解决办法参考这个博主的文章,完美解决问题——双系统之下更改Windows硬盘启动方式为AHCI(不用重装系统)。
【C++】C++日常积累(没啥用).md
前言:
本篇文章用来记录我想到或者没注意过的小概念or知识等。
2021.12.10
重写是对于继承关系来说的,并不是必须加virtual,直接在子类中实现不同的定义即可 。