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. 共享内存和消息队列的区别:
相关推荐
关关钧2 分钟前
【R语言】读取CSV数据时,显示[1] PK...<0 行> (或0-长度的row.names)
开发语言·r语言
以卿a1 小时前
C++ 模板初阶
开发语言·c++
s:1031 小时前
【框架】参考 Spring Security 安全框架设计出,轻量化高可扩展的身份认证与授权架构
java·开发语言
道不尽世间的沧桑2 小时前
第17篇:网络请求与Axios集成
开发语言·前端·javascript
久绊A2 小时前
Python 基本语法的详细解释
开发语言·windows·python
软件黑马王子5 小时前
C#初级教程(4)——流程控制:从基础到实践
开发语言·c#
cpp_learners6 小时前
QT 引入Quazip和Zlib源码工程到项目中,无需编译成库,跨平台,压缩进度
qt·zlib·加密压缩·quazip
闲猫6 小时前
go orm GORM
开发语言·后端·golang
李白同学7 小时前
【C语言】结构体内存对齐问题
c语言·开发语言
黑子哥呢?8 小时前
安装Bash completion解决tab不能补全问题
开发语言·bash