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. 共享内存和消息队列的区别:
相关推荐
迷迭所归处3 分钟前
C++ —— 关于vector
开发语言·c++·算法
架构文摘JGWZ31 分钟前
Java 23 的12 个新特性!!
java·开发语言·学习
leon62532 分钟前
优化算法(一)—遗传算法(Genetic Algorithm)附MATLAB程序
开发语言·算法·matlab
锦亦之22331 小时前
QT+OSG+OSG-earth如何在窗口显示一个地球
开发语言·qt
我是苏苏2 小时前
Web开发:ABP框架2——入门级别的增删改查Demo
java·开发语言
姜太公钓鲸2332 小时前
c++ static(详解)
开发语言·c++
菜菜想进步2 小时前
内存管理(C++版)
c语言·开发语言·c++
2301_789985942 小时前
Java语言程序设计基础篇_编程练习题*18.29(某个目录下的文件数目)
java·开发语言·学习
知星小度S2 小时前
C语言——自定义类型
c语言·开发语言
快乐牌刀片882 小时前
web - JavaScript
开发语言·前端·javascript