一、模拟面试
指针与引用的区别 | |
C/C++的区别 | C是完全面向过程的语言,C++中包含C中的全部功能,并且具有面向对象的特征,属于半面向过程,半面向对象 |
对QT中哪些控件比较熟悉 | QWidget, |
信号与槽 | 信号与槽机制是Qt的一个重要机制,信号只需要声明,不需要定义,槽函数需要声明和定义,使用connect函数将信号与槽函数连接, |
对象树模型 | |
什么情况下使用多线程 | |
使用多线程需要注意什么 | 线程是任务调度的最小单位,多线程共享同一进程的资源时可能会出现竞态,及多个线程同时 |
select和poll和epoll的区别 | |
描述一下智能指针 | |
TCP的TTL | |
共享内存和消息队列的区别 | 共享内存是在外部空间映射一块空间,并设置为 |
二、使用Qt Creator制作简易闹钟
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPaintEvent>
#include<QDebug>
#include<QPainter>
#include <QTimer>
#include <QTime>
#include <QTimerEvent>
#include <QDateTime>
#include <cmath>
#include <QLabel>
#include <QIcon>
#include <QPalette>
#include <QColor>
#include <QBrush>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void mouseMoveEvent(QMouseEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
private:
Ui::Widget *ui;
QString SysTime; //系统时间
double hour; //小时
double minute; //分钟
double second; //秒数
double msec; //毫秒
int SysTimeTid = 0; //系统定时器id号
QPixmap *pix; //映射屏幕
QPixmap *pixhour;
QPixmap *pixmin;
QPixmap *pixsec;
void paintEvent(QPaintEvent *event)override; //绘画事件
void timerEvent(QTimerEvent *event) override ; //时间事件
QPoint temp; //辅助向量坐标点
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->resize(600, 600);
//触发刷新时间事件
SysTimeTid = this->startTimer(1);
this->setWindowIcon(QIcon(":/pictrue/clock.png")); //窗口图标
setWindowFlags(windowFlags() | Qt::FramelessWindowHint); //关闭上方标题栏
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true); //抗锯齿
// painter.setBrush(QColor("white"));
// painter.setPen(Qt::NoPen);
// painter.drawRoundedRect(rect(), 100, 100); // 设置圆角半径为10像素
QPalette palette = this->palette();
palette.setColor(QPalette::Background, "#1C1C1D"); // 设置背景颜色
this->setAutoFillBackground(true);
this->setPalette(palette);
// // 创建一个圆角矩形路径
// QPainterPath path;
// path.addRoundedRect(rect(), 100, 100); // 设置圆角半径为10像素
// // 使用路径绘制圆角矩形
// painter.drawPath(path);
// painter.setRenderHint(QPainter::Antialiasing, true);
QPainterPath painterPath;
painterPath.addEllipse(100, 100, 400, 400);
painter.setClipPath(painterPath); //添加绘制区域,为圆形绘制
QBrush brush("#FFFFFE"); // 填充色
painter.setBrush(brush);
painter.drawEllipse(100, 100, 400, 400);
QTransform transform;
transform.translate(300, 300); //平移坐标原点
painter.setTransform(transform);
painter.setPen(Qt::black);
// painter.drawPoint(250,250);
for(int i=1;i<=60;i++)
{
painter.setPen(Qt::red);
painter.save();
painter.rotate(6*i);
if(i%5==0)
{
QPen pen;
pen.setColor("#8B8C8B"); // 设置画笔颜色
pen.setWidth(10); // 设置画笔宽度
pen.setCapStyle(Qt::RoundCap); // 设置画笔端点为圆形
painter.setPen(pen);
painter.drawLine(0, -185, 0, -155); //大刻度
//painter.drawText(QPoint(-5, -160), QString::number(i/5)); //数字
}
else
{
QPen pen;
pen.setColor(Qt::black); // 设置画笔颜色
pen.setWidth(1); // 设置画笔宽度
painter.setPen(pen); //小刻度
painter.drawLine(0, -185, 0, -175);
}
painter.restore();
}
QPen pen;
painter.save();
pen.setColor(Qt::black); // 设置画笔颜色
pen.setWidth(10); // 设置画笔宽度为
pen.setCapStyle(Qt::RoundCap); // 设置画笔端点为圆形
painter.setPen(pen); //时针
painter.rotate(30*(hour+minute/60+second/360)); //24小时
painter.drawLine(0, 0, 0, -90);
painter.restore();
painter.save();
painter.save();
pen.setColor(Qt::black); // 设置画笔颜色
pen.setWidth(10); // 设置画笔宽度
pen.setCapStyle(Qt::RoundCap); // 设置画笔端点为圆形
painter.setPen(pen); //分针
painter.rotate(6*(minute+second/60)); //60分钟
painter.drawLine(0, 0, 0, -185);
painter.restore();
pen.setColor("#F09A37"); // 设置画笔颜色
pen.setWidth(3); // 设置画笔宽度
painter.setPen(pen); // 应用新的画笔设置
pen.setCapStyle(Qt::RoundCap); // 设置画笔端点为圆形
painter.rotate(6* (second+(msec/1000) + 1)); // 旋转度数 360度 60秒钟
painter.drawLine(0, 20, 0, -185);
painter.restore(); // 旋转完成之后还原
}
void Widget::timerEvent(QTimerEvent *event)
{
//判断是否为自己的定时器
if(event->timerId() == SysTimeTid)
{
//系统定时器
//在ui界面显示日期时间
QDateTime currentDateTime = QDateTime::currentDateTime();
QTime currentTime = currentDateTime.time();
hour = currentTime.hour(); // 获取小时
minute = currentTime.minute(); // 获取分钟
second = currentTime.second(); // 获取秒数
msec = currentTime.msec(); //毫秒
// qDebug()<<hour;
// qDebug()<<minute;
// qDebug()<<second;
// qDebug()<<msec;
//刷新界面
this->update();
}
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
this->move(event->globalPos() - temp);
}
void Widget::mousePressEvent(QMouseEvent *event)
{
//记录点击时鼠标的
temp = event->globalPos() - this->pos();
}
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}