【Qt】第五、六、七、九章:主窗口、事件机制、绘图和网络编程

第五章:主窗口

一、概述

  1. Qt提供了QMainWindow和其相关的类进行窗口的管理。
  2. QMainWindow类包含:菜单栏、工具栏、状态栏、中心部件、锚接部件
  3. 创建主窗口方法:
    一、全部代码生成,单继承自QMainWindow类,在子类的实现文件中使用代码创建应用程序主窗口的菜单、工具栏、锚接部件以及状态栏等并设置它们的属性;
    二、使用Qt设计师绘制应用程序主窗口,然后添加菜单、工具栏等,并进行属性设置、关联信号与槽;与代码相结合;
  4. 成员函数
    QMenuBarQMainWindow.::menuBar ( ) const //菜单栏
    QToolBar
    QMainWindow::addToolBar ( const QString& title ) //工具栏
    void QMainWindow::setCentralWidget ( QWidget* widget ) //中心部件
    QStatusBar*QMainWindow::statusBar ( ) const //状态栏

二、菜单栏

  1. QMenuBar类提供一个水平的菜单栏,可添加QMenu对象,在下拉框加QAction类型动作对象。
    e.g:
//添加“文件”菜单
Menu *fileMenu = ui.menuBar->addMenu(tr("文件(&F)"));
//添加“打开文件”动作
QAction *action_Open = fileMenu.addAction(QIcon("../imageslopen.png"),tr("打开文件(&O)""));
  1. QAction类常用方法:
    setShortcut)设置快捷键
    setStatusTip ()设置状态提示
    setlcon(Qlcon(“图片路径”))
    QAction::triggered ( )【信号】当在此动作中单击鼠标,则发送该信号。
    QAction类示例:
QAction *openAction;
//构造一个QAction类的对象
openAction = new QAction(tr("&open")this) ;//设置动作快捷键
openAction->setShortcut (QKeySequence : : 0pen);//状态栏显示
openAction->setStatusTip(tr("open a file."));//把这个QAction添加到菜单
QMenu*file = menuBar ()->addMenu(tr("&File"));file->addAction(openAction) ;
//把这个QAction添加到工具条:
QToolBar *toolBar = addToolBar(tr("&File"));toolBar->addAction(openAction) ;

三、工具栏

  1. QToolBar类:常用QToolbar和QComboBox
    e.g:
    工具栏实例

四、状态栏

  1. QStatusBar类提供了一-个水平条,用来显示状态信息。
  2. 状态信息可以被分为三类:
    ●临时信息,如一般的提示信息;使用showMessage()函数来显示一个临时消息,它会出现在
    状态栏的最左边。
    ●正常信息,如显示页数和行号;一般用addWidget()函数添加一-个QL abel到状态栏上用于显.
    示正常信息,它会生成到状态栏的最左边,可能会被临时消息所掩盖。
    ●永久信息,如显示版本号或者日期。如果要显示永久信息,要使用addPermanentWidget()函数来添加一个如QLabel一样的可以显示信息的部件,它会生成在状态栏的最右端,不会被临时消息所掩盖。
//显示临时消息,显示2000毫秒即2秒钟
ui->statusBar->showMessage(tr("欢迎使用多文档编辑器"), 2000);
//创建标签,设置标签样式并显示信息,将其以永久部件的形式添加到状态栏
QLabel *permanent = new QL abel(this);
permanent->setFrameStyle(QFrame::Box | QFrame::Sunken);
permanent->setText("“status display");
ui->statusBar-> addPermanentWidget(permanent); 

结果:“欢迎使用多文档编辑器”字符串在显示一会儿后就自动消失了,而“status display-直显示在状态栏最右端。

五、中心部件

//创建中心部件
QTextEdit * text;
text = new QTextEdit(this);
setCentralWidget(text);

六、资源机制

  1. Qt资源机制是一-个独立于平台的(跟使用的操作系统无关)用于在可执行文件中存
    储二进制文件的机制,是Qt核心机制之一。
  2. 可以让需要的文件(图片、文本等)包含到程序编程生成的可执行文件(例如
    exe文件)中。保证了程序中使用的文件不会丢失、不会因为存放路径而导致程序运行错误。使用资源集( Resource Collection Files) 文件,即 .qrc文件。qmake能够识别这个资源集文件,并且能够根据它的描述去相应的目录下定位具体的资源。
  3. qrc资源文件是基于标准xml格式的文本文件,列出了所有嵌入到可执行文件中的文件,条理非常清晰,易于阅读和维护。
  4. 引用使用:加 : /

第六章:事件机制

  1. QEvent类
  2. 当调用QApplication: :exec()时,就进入了事件循环
  3. 事件传递与处理:
    e.g键盘按键事件传递示意:
    示意图
  4. 鼠标及滚轮事件:QMouseEvent类、QWheelEvent类
void mousePressEvent( QMouseEvent * event);
void mouseReleaseEvent( QMouseEvent * event);
void mouseDoubleClickEvent( QMouseEvent *event);
void mouseMoveEvent( QMouseEvent * event);
void wheelEvent( QWheelEvent * event);
  1. 键盘事件:QKeyEvent类;key()函数可以获取具体按键(如果是方向键,对应:Key_Up、Key_Down、Key_Left、Key_Right)。
    e.g:
    头文件:
protected:
void keyPressEvent( QKeyEvent * event);
void keyReleaseEvent( QKeyEvent * event);

c文件:

void Widget::keyPressEvent(QKeyEvent * event){
//键盘按下事件
if(event->modifiers() == Qt::ControlModifier){   //是否按下 Ctrl键
       if(event->key()== Qt::Key_M)   //是否按下M键
       setWindowState(Qt::WindowMaximized);//窗口最大化 
       }   
       else QWidget::keyPressEvent(event);
}
void Widget::keyReleaseEvent( QKeyEvent * event){  //按键释放事件

}
  1. 定时器事件与随机数:定时器是QTimerEvent类;随机数用qrand()或qsrand()函数实现。
    开启1s定时器:startTimer(1000);
    获取当前时间:
 QTime time = QTime::currentTime();
 QString text = time.toString("hh:mm");
   if((time.second()%2)==0)  //每隔1s将“:”显示为“ ”
         text[2]='';

第七章:绘图

  1. QPainter类提供绘图操作。
  2. 详细见后期的例程实验。

(第八章多线程编程–略)

第九章:网络编程

  1. 基本概念:
    TCP/IP: 传输控制协议/因特网互联协议(网络通讯协议),是Internet最基本的协议,由传输层的TCP协议和网络层的IP协议等组成;
    HTTP: 超文本传输协议,面向网页,传输被包装成TCP协议传输;
    FTP(File Transfer Protocol): 文件传输协议,面向文件;
    SOCKET: 是实现传输层协议的一种编程API,可以是TCP,也可以是UDP;
    URL组成: 资源类型、存放资源的主机域名、资源文件名。
    IP: 分IPv4(32位)和IPv6(128位)两大类。
  2. SOCKET
    socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。
    是不同PC进程间的通信机制。
    socket类型:
    ① 数据流SOCK_STREAM:基于TCP的Socket,面向连接,提供给应用层可
    靠的流式数据服务,使用TCP的Socket应用程序协议:HTTP,FTP等。优点:基于数据传输的可靠性。
    ② 数据报SOCK_DGRAM:基于UDP的Socket,无连接,适用于数据传输可靠性要求不高的场合。基于UDP的Socket应用程序或协议有:RIP,SNMP,L2TP等。
  3. TCP
    TCP(Transmission Control Protocol,传输控制协议)是一个用于数据传输的低层的网络协议,多个互联网协议(包括HTTP和FTP)都是基于 TCP协议的。TCP是一个面向数据流和连接的可靠的传输协议。QTcpSocket类 为TCP提供了一个接口,该类也继承自QAbstractSocket。与QUdpSocket传输的数据报不同,QTcpSocket传输的是连续的数据流,尤其适合于连续的数据传输。TCP编程一般分为客户端和服务器端,也就是所谓的C/S(Client/Server)模型。
    TCP
    TCP编程步骤:
    TCP编程
  4. UDP
    UDP(User Datagram Protocol,用户数据报协议)是一个轻量级的、不可靠的、面向数据报的、无连接的协议,用于可靠性不是非常重要的情况。例如,一个服务器报告一天的时间可以选择UDP。如果一个包含时间的数据报丢失了,那么客户端可以简单地发送另外一个请求。UDP一般分为发送端和接收端。
    QUdpSocket类用来发送和接收UDP数据报,继承自QAbstractSocket。这里的Socket就是所谓的“套接字”,简单来说,套接字就是一个IP地址加一个port端口号。这样就可以实现两台主机的两个应用程序间通信。
    在这里插入图片描述
    UDP编程步骤:
    UDP
    QUdpSocket类最通用的使用方式是:
    (1)用bind() 函数绑定一个IP地址和端口Port,然后调用writeDatagram()和readDatagram()函数传输数据。
    (2)如果要使用QIODevice中的read()、readLine()、write()等函数,必须首先调用connectToHost()函数,直接建立一个和对方的连接。
    (3)只要向网络写入了一个数据报,SOCKET就产生一个bytesWritten()信号,如果仅仅是发送数据报,无需调用bind()。
    (4)数据报到来,readyRead()信号被产生,此时hasPendingDatagrams()函数返回真(true)。调用pendingDatagramSize()获取第一个数据报的长度(size),readDatagram()读取数据报内容。
    总结
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值