06 2018 档案
摘要:综合实训项目 一、实训目的 以一个小型企业为背景,完成基于Linux系统的各种常用的网络服务,主要掌握企业利用RHEL架构DHCP服务、DNS服务、WEB服务、FTP服务和E-MAIL服务。注:本项目要求用到2个Linux系统,要求2个系统重新安装。 二、实训要求 参考项目背景,根据项目规划,进行项
阅读全文
摘要:1.为linux系统分配IP地址:192.168.X.1/24,并重启网络服务,客户端XP系统IP地址为:192.168.X.2/24, 2.查询本机是否安装了vsftpd服务,结果显示未安装,挂载光盘,安装vsftpd服务 3.启动vsftpd服务 4.在linux系统中的火狐浏览器中通过本服务器
阅读全文
摘要:实验需求:1) 使用RPM包安装samba服务 2) 实现匿名访问,验证可以读写文件、目录 3) 实现指定用户的访问 4) 实现指定用户的访问,并为用户赋予不同的权限 启动LINUX系统,进行SAMBA服务器配置,并截图。 1. 为linux服务器的网卡设置IP地址:192.168.x.1/2,设置
阅读全文
摘要:1.为linux系统分配IP地址:192.168.X.1/24,客户端XP系统IP地址为:192.168.X.2/24,其主要DNS指定为:192.168.X.1。 2.查询本机是否安装了httpd服务,结果显示已安装(默认已安装) 3.启动httpd服务 4.在linux系统中的火狐浏览器中打开本
阅读全文
摘要:实验背景:在Linux系统上配置主要DNS服务器和辅助DNS服务器,所在域名为example.com,子网为192.168.X.0。 启动已安装LINUX系统,进行DNS服务器配置。 一、配置主要DNS服务器 1.为linux服务器的默认网卡设置IP地址:192.168.x.1/24,设置完毕后,重
阅读全文
摘要:说明: 操作系统:CentOS 6.2 IP地址:192.168.21.164 子网掩码:255.255.255.0 网关:192.168.21.2 问题: 现在要增加一个IP地址:192.168.21.165(子网掩码、网关与原来的相同) 操作方法: 1、cp /etc/sysconfig/net
阅读全文
摘要:实验背景:在LINUX系统上为一园区网络配置DHCP服务器,给网络内各主机自动分配IP地址,地址池范围为:192.168.X.100~192.168.X.200,配置作用域选项,其中网关为:192.168.X.254,DNS地址为:192.168.X.1,域名为:abc.com,默认地址租用时间是2
阅读全文
摘要:安装DHCP服务器 DHCP配置文件 可以使用RHEL 6.0自身携带的RPM包安装,安装结束后DHCP端口监督程序dhcpd配置文件是/etc/dhcp目录中的名为dhcpd.conf的文件。下面手工建立/etc/dhcp/dhcpd.conf文件,该文件通常包括3个部分,即parameters参
阅读全文
摘要:一、开机自动挂载文件系统设置 #mkdir /media/RHEL #mount /dev/sr1 /media/RHEL 通过修改文件挂载表/etc/fstab实现/dev/sr1开机自动挂载到/media/RHEL 重启计算机:#init 6,然后通过命令:#df –H 查看光驱sr1能否实现开
阅读全文
摘要:1) 文件和目录类命令: 启动计算机,利用root用户登录到系统,进入字符界面。 用pwd命令查看当前所在的目录,转换到系统/目录。 用ls命令列出此目录下的文件和目录,其显示的总数为( 20)个,再用ls –a显示,ls –al显示,练习ls的其他参数显示效果,比较结果的不同。 在系统/目录下,创
阅读全文
摘要:11 修改网络设置 (1)修改IP地址: 执行命令: [root@localhost /]# vi /etc/sysconfig/network-scripts/ifcfg-eth0说明:eth0是指第一个网卡接口,如果网线接在第二个接口,请改为eth1; 编辑文件内容: # Realtek Sem
阅读全文
摘要:linux解压缩命令 tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。 -z:有gzip属性的 -j
阅读全文
摘要:虚拟机下配置yun源 [root@localhost ~]# mkdir /iso mount /dev/cdrom /iso cd /iso ll [root@localhost iso]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# ls
阅读全文
摘要:linux下创建和删除软、硬链接 在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问。 链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种
阅读全文
摘要:mount -t iso9660 /dev/cdrom /mnt/cdrom umout /mnt/cdrom 查看系统已经挂载的文件系统 mount 每一行输出格式: 分区名 on 挂载点 type 文件系统类型 (挂载的选项) Linux系统在使用光盘、软盘或U盘时,必须先执行挂载(mount)
阅读全文
摘要:Linux chmod 命令 chmod用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。该命令有两种用法。一种是包含 字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。 1. 文字设定法 语法:chmod [+ | - | =] 文件名 命令中各选项的含义为: 操作对象w
阅读全文
摘要:Linux Vi 命令 ************************************************************************* 在vi中使用命令的方法是:冒号+命令+回车,如:q 回车代表退出。 ******************************
阅读全文
摘要:rpm 常用命令 1.安装一个包 # rpm -ivh 文件名 2.升级一个包 # rpm -Uvh文件名 3.移走一个包 # rpm -e文件名 4.安装参数 --force 即使覆盖属于其它包的文件也强迫安装 --nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。 5.查
阅读全文
摘要:偷包,就是在网络传输过程中,截取某一数据包,进行解析获取其发送的数据。 原理与TCP通信类似。只需在创建套接字时,参数不同。 fd = socket(PF_INET, SOCK_RAW, IPPROTO_TCP); PF_INET IPV4协议 SOCK_RAW 对原始网络协议访问 IPPROTO_
阅读全文
摘要:UDP通信流程步骤: 服务端: 等待(被动)接收发送 1: 创建 socket: socket() 2: 绑定端口: bind() 3: 读取消息: read() 4: 发送消息: write() 5: 关闭套接字: close() 客户端:主动发送接收 1: 创建 socket: socket()
阅读全文
摘要:TCP通信流程步骤: 服务端: 等待(被动)接收发送 1: 创建 socket: socket() 2: 绑定端口: bind() 3: 监听端口: listen() 4: 接受连接: accept() 5: 读取消息: read() 6: 发送消息: write() 7: 关闭套接字: close
阅读全文
摘要:网络通信 主机 主机 主机 服务器 主机 服务器 主机 主机--主机 主机 服务器 主机 服务器—主机 网络字节序 -- 使用大字节序 #include <arpa/inet.h> 主机序转网络序 uint32_t htonl(uint32_t hostlong); uint16_t htons(u
阅读全文
摘要:基本概念 线程:进程中的某一个处理流程 一个进程可以有多个线程,进程是线程的父进程 所有线程与父进程共享资源 线程分类 内核态线程 由内核调度程序直接调度,充分发挥多处理器的优势 目前linux系统标准线程库采用内核线程方式实现多线程 用户态线程 一个进程包含多个线程,这些线程从内核调度角度来看只是
阅读全文
摘要:例子:利用两个子进程从50进行降序输出 int g_num=50; //偶数 void *threadEven(void *lParam) { while(g_num>0) { if(!(g_num&1)) { printf("even:%d\n",g_num); } g_num--; usleep
阅读全文
摘要:共享内存 是最快的IPC通信方式,不存在数据复制,而是直接内存读写 涉及到多个进程访问,可能出现同时读、写操作,一般采用信号量的方式,进行互斥操作 步骤: 内存共享使用 1: ftok 使用某个文件做关键字创建key 2: shmget 使用key 创建(打开)共享内存 shmid 3: shmat
阅读全文
摘要:信号量:为控制临界资源而产生的一个或一组计数器,本质上是一个整数变量。用于进程的互斥操作 信号量基本操作 P 操作 进程申请临界资源时发出 P 操作 流程:检查信号量取值, > 0 则分配临界资源,信号值-1; 否则表示无空余资源,进程阻塞直到指定资源被释放 V 操作 进程释放临界资源时发出 V 操
阅读全文
摘要:消息与消息队列 IPC (Inter process communication) 广义:所有可以用于进程间通信的对象和方法 狭义:特指消息队列,信号量,共享内存 消息队列 应用于进程间少量数据的顺序共享 信号量 应用于进程间互斥 共享内存 应用与进程间大量数据的随机共享访问 命令行查询IPC对象
阅读全文
摘要:命名管道 FIFO (First In First Out) 命令行: mknod mknod [-m mode] NAME TYPE [ MAJOR MINOR] mknod name b | c major minor //块设备,字符设备文件 mknod name p //管道文件 mknod
阅读全文
摘要:重定向 dup2 int dup(int fd) 重定向文件描述符 int newFd = dup(STDOUT_FILENO) newFd 指向 stdout int dup2(int fd1, int fd2) 重定向文件描述符 dup2(newFd, STDOUT_FILENO) stdout
阅读全文
摘要:管道概念 进程间通信工具, 把数据从一端输出到另一端 如 ps –ef | grep pts 相当于 1: ps –ef > tmpfile 2: grep pts < tmpfile 半双工通信 无名管道(直接称之为管道), 只能用于父子进程或者兄弟进程间通信。 命名管道 , 可以用于所有进程间通
阅读全文
摘要:简单定时器 #include<unistd.h> unsigned int alarm(unsigned int seconds) 返回上一个alarm等待时间,没有则返回0 只能设置 1 个定时器,设置第 2 个时会替换第一个 设置成功后,上一个alarm会失效 定时事件只执行1次,多次执行需要递
阅读全文
摘要:多路复用 select 同时监控多个文件描述符的输入输出 <sys/types.h> <sys/times.h> <sys/select.h> int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, str
阅读全文
摘要:前面的进程控制2,介绍了僵尸进程,和解决方式4种中的两种。下面再补充两种。 解决方式: 3:忽略SIGCHLD信号 父进程设置忽略 SIGCHLD信号,子进程结束自动释放进程表资源 忽略SIGCHLD信号: signal(SIGCHLD, SIG_IGN) 4:捕获SIGCHLD信号 父进程捕获SI
阅读全文
摘要:信号处理 信号值小于 SIGRTMIN 的信号 (1~31) 都是不可靠信号 某些unix版本中,调用信号函数处理后会自动恢复默认信号处理,所以在信号处理函数中还需要继续调用signal函数设置信号处理 这个问题在linux中并不存在 linux 信号处理使用 sigaction函数, sigact
阅读全文
摘要:系统时间 #include<time.h> time_t time(time_t &tSec) 获取当前时间,1900年1月1日0时到现在的秒钟数 double difftime(time_t timeEnd, time_t timeStart) 时间差 系统时间 两个互逆的函数 struct tm
阅读全文
摘要:信号 传送给进程的事件通知,完成异步通信 信号的产生 1.程序错误:硬件异常,除数为0,等 2.外部事件:定时器事件,按键中断(ctrl+c)等 3.显示请求:调用 kill, raise 等信号发送函数 信号的处理 #include<signal.h> void (*signal (int sig
阅读全文
摘要:同步父子进程 wait<sys/wait.h>pid_t wait(int *pState)无子进程则马上返回,有子进程则等待(阻塞)。多个子进程,需要多个调用获取子进程 pid 和 结束状态第一字节: *pState & 0xff 接受到的信号值第二字节: (*pState >> 8) & 0xf
阅读全文
摘要:概念 程序:一个保存在磁盘中的文件,规定运行时要执行的代码和要完成的动作。 进程:把程序加载为内存中一段数据,程序的执行过程,具有产生,发展和消亡的过程 线程:unix的最小调度单位,一个进程可以有多个线程,共享进程ID,共享进程资源。 父子进程 进程采用树形结构管理,一个进程启动另一个进程时,被启
阅读全文
摘要:异或运算:^ --> 两个变量,按照bit位比较,同位置 bit位相等 则结果为 0, 不相等,则结果为1 任意数 x x^x = 0; x^(~x) = 0xffffffff x^0 = x; x^0xffffffff = ~x 或运算:| --> 把两个变量, 按照bit位比较,同位置的bit位
阅读全文
摘要:设备文件 Linux把所有设备都映射成了文件 设备文件一般存储在 /dev 目录下 我们可以像操作文件一样操作他们 ls /dev –l brw-rw 1 root disk 8, 0 Dec 21 20:00 sda crw--w 1 root tty 4, 0 Dec 21 20:00 tty0
阅读全文
摘要:低级文件库 低级文件读写与标准文件读写类似。如fgetc,fputs都是调用read,write。 文件打开/创建#include <fcntl.h> //file controlint open(const char *filename, int flag, [mode_t mode])flag
阅读全文
摘要:makefile编译多个可执行文件1: 多个 C 文件编译成不同的目标文件2: 多个 C 文件编译成 一个目标文件 注意:makefile的文件名的三种形式(优先级排序)makefile>Makefile>GNUMakefile 简单说,makefile类似快捷键。如:创建主函数文件mian.c 函
阅读全文
摘要:标准文件库 查询文件属性<sys/types.h><sys/stat.h>int stat(const char *filename, struct stat *buf)获取文件属性int fstat(int fd, struct stat *buf)功能同stat,但是入参是文件描述符int ls
阅读全文
摘要:gcc编译器(GNU C Compiler) 现在我们所说的 gcc 是 GUN Compiler Collection的缩写,可以支持多种语言编译,比如 C,C++,Java, pascal 等 gcc的主要特征 1: 可移植编译器,支持多种硬件平台 2:支持跨平台交叉编译(跨CPU) 3:多种语
阅读全文
摘要:三种模式命令行模式任何模式下 ESC 进入编辑模式(INSERT)从命令模式下 a, i 等 进入可视化模式(VISUAL)(VISUAL BLOCK)命令模式下,敲 v 进入非编辑模式, ctrl + v cd /etc/vim/root权限编辑 vimrc, 增加一行 set number ?
阅读全文
摘要:查看命令的帮助信息man 命令名 文件操作touch 建立文件 (对于已存在文件,更新时间)cat 查看文件 (-n 自动加上行号)rm 删除文件cp 拷贝文件mv 移动/重命名文件more 分页查看文件 [只支持后翻 --空格]less 分页查看文件[支持前翻后翻查找 – pageup/paged
阅读全文
摘要:drwxrwxr-x第一个字符表示文件类型 d:directory -》目录 r: read 读权限w: write 写权限x: excute 执行权限 rwx rwx r-x文件所有者权限 同组人员权限 其他用户权限 chmod u+x (或者u-x) FILE 给文件所有这增加/减少 某个权限(
阅读全文
摘要:例子解析: 连接数据库,将数据库的数据映射到设计器,可以在设计器中进行买卖操作,或添加车辆。确定后更新到数据库,右方显示卖车记录。 数据库数据 用于厂家的组合框 用于各数据的查询,通过厂家和品牌为标识 源代码: mainwindow.h #ifndef MAINWINDOW_H #define MA
阅读全文
摘要:Xml源代码 domxml.h #ifndef DOMXML_H #define DOMXML_H #include <QString> #include <QStringList> #include <QDomDocument> //文件 #include <QDomProcessingInstr
阅读全文
摘要:XML(可扩展标记语言)是一种用于记录多种数据类型的标记语言。使用XML可以将各类型的文档定义为容易读取的格式,便于用户读取。而且,在应用程序中使用XML,可以轻松实现数据交换。 QT中提供两种访问XML文档的方式:DOM和SAX。 DOM方式:将XML文档转换为树形结果存储到内存中,再进行读取,消
阅读全文
摘要:Qt的应用程序编译出来之后,将单独的exe程序拿到其他PC上运行是运行不起来的,会提示缺少对应的动态链接库。我们需要去Qt的安装目录下找到所有的Qt程序运行时所依赖的,将他们和exe程序放到同一目录下,程序才可以执行。 根据上边的描述我们可以想象的到,如果手动去寻找应用程序依赖的动态库,这是一件非常
阅读全文
摘要:前面介绍了数据库都是要使用SQL语句,并在显示方面不方便,不够直观反映数据。 上节介绍一个模型,可以直接利用该模型连接数据库,可以在QT的可视化界面TabView直接对数据库进行操作,并且不需要使用SQL语句。 思路: 1.按照前面的方式,选择数据库的类型,打开数据库 QSqlDatabase db
阅读全文
摘要:前面使用 SQL 语句完成了对数据库的常规操作,包括简单的 CREATE、SELECT 等语句的使用。我们也提到过,Qt 不仅提供了这种使用 SQL 语句的方式,还提供了一种基于模型的更高级的处理方式。这种基于QSqlTableModel 的模型处理更为高级,如果对 SQL 语句不熟悉,并且不需要很
阅读全文
摘要:sqlite,本地数据库。主要运用在小型的程序,传送方便(如发送附带数据库的程序,但MySQL有点大,或许没安装)。 如何创建本地数据库? 1.新建一个.txt的文本文件。 2.直接将后缀名有.txt改为.db即可。 思路和用法与前面的MySQL一样,连接上有点区别,其他一样。 1.连接数据库的类型
阅读全文
摘要:数据库的创建、添加、修改、查询、删除都是利用SQL语句和类QSqlQuery的结合。 QSqlDatabase::database()。可返回当前正在打开的数据库对象。 数据库的删除 //获取删除的名字 QString strName=ui->lineEdit->text(); //开始事务 QSq
阅读全文
摘要:上一节讲了数据库的连接,本例直接将数据库的插入操作,重点还是QSqlQuery类 QSqlQuery query; //新建二维表 query.exec("CREATE TABLE student(id INT AUTO_INCREMENT PRIMARY KEY,sname VARCHAR(10)
阅读全文
摘要:Qt 提供了 QtSql 模块来提供平台独立的基于 SQL 的数据库操作。这里我们所说的“平台独立”,既包括操作系统平台,有包括各个数据库平台。另外,我们强调了“基于 SQL”,因为 NoSQL 数据库至今没有一个通用查询方法,所以不可能提供一种通用的 NoSQL 数据库的操作。Qt 的数据库操作还
阅读全文
摘要:多线程绘图 前面见过Image绘图设备可以运用在线程中。 本例子。在线程中随机画出一个多边形,通过信号将图片发出,在主线程中接受该图片,并在绘图事件中绘制。 在窗口中有一个按钮,当点击按钮之后,在线程中绘制一张图片,然后将绘制好的图片显示到当前窗口中。 子线程随机画图解析 class MyThrea
阅读全文
摘要:前一节介绍了线程的创建,把一个线程单独作为一类且是继承Qthread,当中也只有一个线程处理函数。很大的弊端。 因此,在Qt4.7及以后版本推荐使用以下的工作方式。其主要特点就是利用Qt的事件驱动特性,将需要在子线程中处理的业务放在独立的模块(类)中,由主线程创建完该对象后,将其移交给指定的线程,且
阅读全文
摘要:通常情况下,应用程序都是在一个线程中执行操作。但是,当调用一个耗时操作(例如,大批量I/O或大量矩阵变换等CPU密集操作)时,用户界面常常会冻结。而使用多线程可以解决这一问题。 多线程有以下几个优势: 1.提高应用程序响应速度。这对于图形界面开发的程序尤为重要,当一个操作耗时很长时,整个系统都会等待
阅读全文
摘要:前面介绍了TCP和UDP的通信,只是文体通信,只能传送文字。本次介绍文件传输,也就是文件读写和TCP通信的结合。 解析:根据之前的TCP通信,建立彼此的连接。服务器选择文件,首先将文件的基本信息发送给客户端。如:文件名,文件大小(用于进度条使用)。如上显示,“head#hello#1024”,即头部
阅读全文
摘要:前面介绍过定时器事件(QTimerEvent),有个弊端,就是每启动一个定时器都要对应的ID。本次介绍在设计器中使用Qtimer。 首先在设计器中添加一个LCD Number,和两个按钮。 头文件 #include <QTimer> QTimer *timer; 按钮添加对应的槽函数,如下: //开
阅读全文
摘要:使用Qt提供的QUdpSocket进行UDP通信。在UDP方式下,客户端并不与服务器建立连接,它只负责调用发送函数向服务器发送数据。类似的服务器也不从客户端接收连接,只负责调用接收函数,等待来自客户端的数据的到达。 解析:UDP无需确认对方是否在线,是否能收到。因此服务端也不需要设置监听套接字。双发
阅读全文
摘要:.pro 文件中加入:QT+=network 在Qt中实现TCP/IP服务器端通信的流程: 1.创建监听套接字,QTcpServer 2.将监听套接字设置为监听模式, listen 3.等待并接受客户端请求,可以通过QTcpServer提供的void newConnection()信号来检测是否有连
阅读全文
摘要:前面介绍了基本文件操作、数据流文件操作和文本文件操作。本次简单介绍内存文件操作。内存文件本质就是建立一块公共内存区域,可以往里读、写。 下面我们使用一段代码来看看QBuffer的有关操作: QBuffer memFile(); //内存文件对象 //打开 bool bIsOk=memFile.ope
阅读全文
摘要:学习了事件、绘图。做个练习,在窗口画出一个棋盘,鼠标点下的格子显示图片 源代码: widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QPaintEvent> #include <QMouseEvent> n
阅读全文
摘要:QDataStream提供了基于QIODevice的二进制数据的序列化。数据流是一种二进制流,这种流完全不依赖于底层操作系统、CPU 或者字节顺序(大端或小端)。例如,在安装了 Windows 平台的 PC 上面写入的一个数据流,可以不经过任何处理,直接拿到运行了 Solaris 的 SPARC 机
阅读全文
摘要:上一节介绍了有关二进制文件的读写。二进制文件比较小巧,却不是人可读的格式。而文本文件是一种人可读的文件。为了操作这种文件,我们需要使用QTextStream类。QTextStream和QDataStream的使用类似,只不过它是操作纯文本文件的。 QTextStream会自动将 Unicode 编码
阅读全文
摘要:文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台的文件操作能力。在所有的 I/O 设备中,文件 I/O 是最重要的部分之一。因为我们大多数的程序依旧需要首先访问本地文件(当然,在云计算大行其道的将来,这一观点可能改变)。QFile提供了从文件中读取和写入数据的能力。 我们通常
阅读全文
摘要:常见的窗体是各种方形的对话框,但有时候也需要非方形的窗体,如圆形,椭圆甚至是不规则形状的对话框。 实现步骤: 新建一个项目,比如项目名称叫做“ShapeWidget”,给此项目添加一个类“ShapeWidget”,基类选择“QWidget”。 为了使该不规则窗体可以通过鼠标随意拖拽,在类中重
阅读全文
摘要:绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类,分别是QPixmap、QBitmap、QImage和 QPicture。其中, QPixmap专门为图像在屏幕上的显示做了优化,与平台相关,不能对图片进行修改。 QBitmap是QPixmap的一个子类,它的色深
阅读全文
摘要:猜数字游戏 通过随机函数产生一个随机的四位数,用户在规定的时间去猜,每猜一次都出提示,数对了还是数大了或小了。 页面切换 语句: ui->stackedWidget->setCurrentWidget(ui->pageStart); 在设计器中利用控件Stacked Widget加载4个页面: 前两
阅读全文
摘要:Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制。整个绘图系统基于QPainter,QPainterDevice和QPaintEngine三个类。 QPainter用来执行绘制的操作; QPaintDevice是一个二维空间的抽象,这个二维空间允许QPainter在其上面进行绘
阅读全文
摘要:事件的接受与忽略 前面讲过很多事件处理器也有事件。但是有些事件不想处理,或是事件传递的顺序又是如何的。 例子: 在设计器中放入一个按钮,同时定义一个点击事件和信号。那么响应的顺序是怎样的? //点击事件 void Button::mousePressEvent(QMouseEvent *e) { i
阅读全文
摘要:Qt 的事件是整个 Qt 框架的核心机制之一,也比较复杂。说它复杂,更多是因为它涉及到的函数众多,而处理方法也很多,有时候让人难以选择。现在我们简单总结一下 Qt 中的事件机制。 Qt 中有很多种事件:鼠标事件、键盘事件、大小改变的事件、位置移动的事件等等。如何处理这些事件,实际有两种选择: 所
阅读全文
摘要:事件对象创建完毕后,Qt 将这个事件对象传递给QObject的event()函数。event()函数并不直接处理事件,而是将这些事件对象按照它们不同的类型,分发给不同的事件处理器(event handler)。 如上所述,event()函数主要用于事件的分发。所以,如果你希望在事件分发之前做一些操作
阅读全文
摘要:有时候,对象需要查看、甚至要拦截发送到另外对象的事件。例如,对话框可能想要拦截按键事件,不让别的组件接收到;或者要修改回车键的默认处理。 通过前面的章节,我们已经知道,Qt 创建了QEvent事件对象之后,会调用QObject的event()函数处理事件的分发。显然,我们可以在event()函数中实
阅读全文
摘要:Qt消息机制和事件 事件(event)是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件在对用户操作做出响应时发出,如键盘事件等;另一些事件则是由系统自动发出,如计时器事件。 在前面也曾经简单提到,Qt 程序需要在ma
阅读全文
摘要:Qt样式表 Qt样式表的思想很大程度上是来自原HTML的层叠式样式表(CSS),通过调用Qwdiget::setStyleSheet()或是Qapplication::setStyleSheet(),可以为一个独立的子部件、整个窗口、甚至是整个应用程序指定一个样式表 样式表语法基础 一个样式表由一系
阅读全文
摘要:在搭建Qt窗口界面的时候,在一个项目中很多窗口,或者是窗口中的某个模块会被经常性的重复使用。一般遇到这种情况我们都会将这个窗口或者模块拿出来做成一个独立的窗口类,以备以后重复使用。 在使用Qt的ui文件搭建界面的时候,工具栏栏中只为我们提供了标准的窗口控件,如果我们想使用自定义控件怎么办? 思路:在
阅读全文
摘要:布局管理器 所谓 GUI 界面,归根结底,就是一堆组件的叠加。我们创建一个窗口,把按钮放上面,把图标放上面,这样就成了一个界面。在放置时,组件的位置尤其重要。我们必须要指定组件放在哪里,以便窗口能够按照我们需要的方式进行渲染。这就涉及到组件定位的机制。 Qt 提供了两种组件定位机制:绝对定位和布局定
阅读全文
摘要:QLabel控件使用 QLabel是我们最常用的控件之一,其功能很强大,我们可以用来显示文本,图片和动画等。 显示文字 (普通文本、html) 通过QLabel类的setText函数设置显示的内容: void setText(const QString &) 可以显示普通文本字符串 QLable
阅读全文
摘要:概念 对话框是 GUI 程序中不可或缺的组成部分。很多不能或者不适合放入主窗口的功能组件都必须放在对话框中设置。对话框通常会是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。 Qt 中使用QDialog类实现对话框。就像主窗口一样,我们通常会设计一个类继承QDialog。QDia
阅读全文
摘要:概念: Qwidget:所有窗口及窗口控件都是从QWidget直接或间接派生出来的。 在Qt中创建对象的时候会提供一个Parent对象指针,下面来解释这个parent到底是干什么的。 QObject是以对象树的形式组织起来的。 当你创建一个QObject对象时,会看到QObject的构造函数
阅读全文
摘要:C++11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。首先看一下Lambda表达式的基本构成: [函数对象参数](操作符重载函数参数)mutable或exception ->返回值{函数体} ① 函数对象参数; [],标识一个Lambda的开始,这部分必须存在,不能省略。函数
阅读全文
摘要:自定义信号和槽 信号和槽的本质都是函数。 区别: 信号必须由signal关键字来声明 信号可以重载 信号没有返回值,但可以有参数。由于信号都是没有返回值,所以,槽函数一定没有返回值 信号就是函数的声明,只需声明,无需定义。槽既要函数声明也要完成定义。 使用方式:emit MySignal(); 例子
阅读全文
摘要:信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数
阅读全文
摘要:手动创建 添加一个空项目 选择【choose】进行下一步。设置项目名称和路径 —> 选择编译套件 --> 修改类信息 --> 完成(步骤同上),生成一个空项目。在空项目中添加文件:在项目名称上单击鼠标右键弹出右键菜单,选择【添加新文件】 弹出新建文件对话框 在此对话框中选择要添加的类或者文件,根据向
阅读全文
摘要:创建程序步骤: 打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项 弹出New Project对话框,选择Qt Widgets Application, 选择【Choose】按钮,弹出如下对话框 设置项目名称和路径,按照向导进行下一步, 选择
阅读全文