0911(绘制事件,qt中的网络通信)

一、实现一个时钟

1)代码

头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QTimer>
#include <QTime>
#include <QTimerEvent>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void paintEvent(QPaintEvent *event) override;

private:
    Ui::Widget *ui;
    QTimer t1;  //定义一个定时器变量
    int hh=0;       //小时
    int mm =0;      //分钟
    int ss =0;      //秒

};
#endif // WIDGET_H

源文件:

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //绑定定时器
    connect(&t1,SIGNAL(timeout()),this,SLOT(update()));
    //启动定时器
    t1.start(1000);//一秒
}

Widget::~Widget()
{
    delete ui;
}
void Widget::paintEvent(QPaintEvent *event)
{
    //获取系统时间
    QTime systime = QTime::currentTime();
    QString tm = systime.toString("hhmmss");
    int a=tm.toInt();   //例:200112
    qDebug ()<<a;
    hh=a/10000;            //小时
    mm=a%10000/100;      //分钟
    ss=a%100;            //秒
    //实例化一个对象
    QPainter q1(this);
    //来个笔
    QPen pen;
    pen.setColor("purple");
    pen.setWidth(5);            //设置画笔粗细
    //来个字体
    //准备字体
    QFont font;
    font.setFamily("宋体");            //设置字体族
    font.setPointSize(10);            //设置字体大小
    //把画笔给画家
    q1.setPen(pen);
    q1.setFont(font);
    //画圆
    q1.translate(this->width()/2,this->height()/2);
    q1.drawEllipse(QPoint(0,0),200,200);
    //填色
    q1.setBrush(QBrush(QColor(255,182,193)));
    q1.setPen(Qt::NoPen);//设置是否有边框
    q1.drawEllipse(QPoint(0,0),200,200);
    //画刻度
    pen.setColor("black");
    pen.setWidth(5);//粗刻度
    q1.setPen(pen);
    //旋转30°画一个
    for(int i=0;i<12;i++)
    {
        int num = 0;
        num += 30;
        QString x = QString::number(i+1,10);
        q1.rotate(num);//设置绘制坐标正方向
        q1.drawLine(QPoint(0,-200),QPoint(0,-190));
        q1.drawText(QPoint(0,-170),x);
    }
    pen.setWidth(2);//细刻度
    q1.setPen(pen);
    for(int i=0;i<60;i++)
    {
        int num = 0;
        num += 6;
        q1.rotate(num);//设置绘制坐标正方向
        q1.drawLine(QPoint(0,-200),QPoint(0,-195));
    }

    //画三个指针
    pen.setColor("red");
    pen.setWidth(10);
    q1.setPen(pen);
    q1.rotate(hh*30+mm/2);
    q1.drawLine(QPoint(0,0),QPoint(0,-50));
    q1.rotate(-hh*30+mm/2-30);
    pen.setColor("blue");
    pen.setWidth(5);
    q1.setPen(pen);
    q1.rotate(mm*6);
    q1.drawLine(QPoint(0,0),QPoint(0,-80));
    q1.rotate(-mm*6);
    pen.setColor("green");
    pen.setWidth(3);
    q1.setPen(pen);
    q1.rotate(ss*6);
    q1.drawLine(QPoint(0,0),QPoint(0,-100));
    q1.rotate(-ss*6);

}

2)运行结果

二、思维导图(画不完了先空着)

三、模拟面试题

  1. 指针和引用的区别:1)指针定义时需要使用*,引用定义时需要使用&。2)指针取值需要使用*号运算符完成,引用使用时直接跟目标使用方法一样。3)指针可以不初始化作为一个野指针存在,引用必须初始化。4)指针初始化后还可以修改指向的指,引用一旦指定就不可修改5)有二级指针但没有二级引用。6)有空指针,没有空引用。7)指针不能指向右值,但引用有右值引用.8)指针定义时需要分配8字节的内存空间,引用不需要分配内存空间它使用的是目标的内存空间。9)指针进行偏移运算时是对地址的偏移,引用进行偏移运算时是对目标值的偏移。10)指针有指针数组,引用不可以引用一个数组
  2. C/C++的区别:1、c是完全面向过程编程,c++是半面向过程半面向对象编程。2、C++是对C语言的扩充,C语言的所有语法C++都可以直接使用。
  3. Qt中对哪些控件比较熟悉:QPushButton按钮,QWidget图形化界面类的父类,
  4. Qt中的信号与槽机制:就是一个组件用于发送信号,与之绑定的组件接收到信号后会做出相应的反应。信号:所谓信号就是指信号函数,定义在类signals权限下,是一个不完整的函数只有函数声明没有函数定义,它不能像普通函数一样被调用只能被发射出去。槽:所谓槽就是指槽函数,定义在slots权限下,是一个完整的函数,既有函数声明也有函数定义。可以像普通函数一样被调用,但是普通函数不能当作槽函数接收信号。
  5. 对象树模型:对象树模型是qt中类的存储方式,其中子组件构造时需要指定父组件,子组件的生命周期由父组件进行管理,父组件展示时回一并展示子组件,父组件释放时会一并释放子组件。每一个组件都会有一个父组件指针和一个子组件链表。
  6. 什么情况下需要使用多线程(引入多线程的目的):在一个进程中需要同时执行多个任务时可以使用多线程来完成多个阻塞任务的并发进行,或者在拷贝文件等操作时为了提高效率可以使用多线程。
  7. 使用多线程需要注意什么:需要注意竞态
  8. Epoll和select的区别:1、存储方式上:2、
  9. 对智能指针的理解:智能指针有:独占智能指针、共享智能指针、弱智能指针。智能指针是用来防止由于多个指针指向同一个内存地址导致的指针内存泄漏的,智能不是指针而是模板类。
  10. 共享内存和消息队列的区别:
相关推荐
I_Am_Me_2 分钟前
【JavaEE进阶】 JavaScript
开发语言·javascript·ecmascript
重生之我是数学王子13 分钟前
QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现
开发语言·c++·qt
Ai 编码助手14 分钟前
使用php和Xunsearch提升音乐网站的歌曲搜索效果
开发语言·php
学习前端的小z18 分钟前
【前端】深入理解 JavaScript 逻辑运算符的优先级与短路求值机制
开发语言·前端·javascript
神仙别闹26 分钟前
基于C#和Sql Server 2008实现的(WinForm)订单生成系统
开发语言·c#
XINGTECODE27 分钟前
海盗王集成网关和商城服务端功能golang版
开发语言·后端·golang
zwjapple44 分钟前
typescript里面正则的使用
开发语言·javascript·正则表达式
小五Five1 小时前
TypeScript项目中Axios的封装
开发语言·前端·javascript
前端每日三省1 小时前
面试题-TS(八):什么是装饰器(decorators)?如何在 TypeScript 中使用它们?
开发语言·前端·javascript
凡人的AI工具箱1 小时前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang