利用QT制作一个简易时钟

目的:实现时钟效果,实现时分秒指针的进位与清零

源代码

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    timer=startTimer(1000);
    QTime nowtime = QTime::currentTime();
    h = nowtime.hour();
    m = nowtime.minute();
    s = nowtime.second();
}

Widget::~Widget()
{
    delete ui;
}

//重写定时器事件的处理函数
void Widget::timerEvent(QTimerEvent *event)
{
    s++;
    if(s == 60)
    {
        s = 0;
        m++;
        if(m == 60)
        {
            m = 0;
            h++;
            if(h == 24)
            {
                h = 0;
            }

        }
    }
}

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing,true);
    QPen pen(Qt::black,3);
    painter.setPen(pen);
    QPoint center(width()/2,height()/2);
    painter.translate(center);

    QPoint cen(0,0);
//    painter.drawEllipse(cen,200,200);

    for(int i=0;i<12;i++)
    {
        painter.rotate(30);
        painter.drawLine(0,-180,0,-200);
    }

    for(int i=0;i<60;i++)
    {
        painter.rotate(6);
        painter.drawLine(0,-190,0,-200);
    }
    painter.end();

    QPainter painter_s(this);
    painter_s.setRenderHint(QPainter::Antialiasing,true);
    pen.setWidth(1);

    painter_s.setPen(pen);
    painter_s.translate(center);
    painter_s.rotate(s * 6);
    painter_s.drawLine(0,0,0,-150);
    painter_s.end();

    QPainter painter_m(this);
    painter_m.setRenderHint(QPainter::Antialiasing,true);
    pen.setWidth(4);
    pen.setColor(Qt::blue);
    painter_m.setPen(pen);
    painter_m.translate(center);
    painter_m.rotate(m * 6);
    painter_m.drawLine(0,0,0,-150);
    painter_m.end();

    QPainter painter_h(this);
    painter_h.setRenderHint(QPainter::Antialiasing,true);
    pen.setWidth(7);
    pen.setColor(Qt::red);
    painter_h.setPen(pen);
    painter_h.translate(center);
    painter_h.rotate(h * 30 + m * 0.5);
    painter_h.drawLine(0,0,0,-100);
    painter_h.end();

    update();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简易的计算器示例,使用Qt实现: ```cpp #include <QtWidgets> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建主窗口 QWidget window; window.setWindowTitle("Calculator"); // 创建文本框用于显示计算结果 QLineEdit* resultLineEdit = new QLineEdit(&window); resultLineEdit->setReadOnly(true); resultLineEdit->setAlignment(Qt::AlignRight); resultLineEdit->setFixedHeight(30); // 创建按钮布局 QGridLayout* buttonLayout = new QGridLayout; // 创建数字按钮 for (int i = 0; i < 10; ++i) { QPushButton* button = new QPushButton(QString::number(i), &window); buttonLayout->addWidget(button, i / 3, i % 3); QObject::connect(button, &QPushButton::clicked, [=]() { resultLineEdit->setText(resultLineEdit->text() + button->text()); }); } // 创建运算符按钮 QStringList operators = { "+", "-", "*", "/" }; for (int i = 0; i < operators.size(); ++i) { QPushButton* button = new QPushButton(operators.at(i), &window); buttonLayout->addWidget(button, i + 3, 3); QObject::connect(button, &QPushButton::clicked, [=]() { resultLineEdit->setText(resultLineEdit->text() + " " + button->text() + " "); }); } // 创建等号按钮 QPushButton* equalButton = new QPushButton("=", &window); buttonLayout->addWidget(equalButton, 6, 2); QObject::connect(equalButton, &QPushButton::clicked, [=]() { QString expression = resultLineEdit->text(); QScriptEngine engine; QScriptValue result = engine.evaluate(expression); resultLineEdit->setText(result.toString()); }); // 创建清除按钮 QPushButton* clearButton = new QPushButton("C", &window); buttonLayout->addWidget(clearButton, 6, 0); QObject::connect(clearButton, &QPushButton::clicked, [=]() { resultLineEdit->clear(); }); // 创建布局并设置主窗口布局 QVBoxLayout* mainLayout = new QVBoxLayout(&window); mainLayout->addWidget(resultLineEdit); mainLayout->addLayout(buttonLayout); // 显示主窗口 window.setLayout(mainLayout); window.show(); return app.exec(); } ``` 上述代码创建了一个简易的计算器界面,包括一个用于显示计算结果的文本框和数字、运算符按钮。用户可以通过点击按钮输入数字和运算符,并通过点击"="按钮执行计算并显示结果。"C"按钮用于清除文本框内容。 注意:该计算器使用Qt的QScriptEngine类来实现计算功能。它可以解析并计算基本的数学表达式。如果您需要更复杂的计算功能,可能需要使用其他的数学库或编自己的计算逻辑。 希望这个示例对您有所帮助!如果您有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值