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. 共享内存和消息队列的区别:
相关推荐
Kisorge13 分钟前
【C语言】指针数组、数组指针、函数指针、指针函数、函数指针数组、回调函数
c语言·开发语言
轻口味1 小时前
命名空间与模块化概述
开发语言·前端·javascript
晓纪同学2 小时前
QT-简单视觉框架代码
开发语言·qt
威桑2 小时前
Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
开发语言·qt·扩张策略
飞飞-躺着更舒服2 小时前
【QT】实现电子飞行显示器(简易版)
开发语言·qt
fyzy2 小时前
Qt获取本地计算的CPU温度
qt
cbdg37572 小时前
Qt 6 QML Settings location 不创建指定路径文件
qt
了一li2 小时前
Qt中的QProcess与Boost.Interprocess:实现多进程编程
服务器·数据库·qt
杨德杰2 小时前
QT网络(一):主机信息查询
网络·qt
明月看潮生2 小时前
青少年编程与数学 02-004 Go语言Web编程 16课题、并发编程
开发语言·青少年编程·并发编程·编程与数学·goweb