Qt:电子时钟

 digiclock.h

#ifndef DIGICLOCK_H
#define DIGICLOCK_H
 
 
#include <QLCDNumber>
#include <QMouseEvent>
#include <QPoint>
 
 
 
 
class DigiClock : public QLCDNumber
{
    Q_OBJECT
 
 
public:
    DigiClock(QWidget *parent = 0);
    ~DigiClock();
 
 
public:
    void mousePressEvent(QMouseEvent *e);//重定义鼠标按下事件
    void mouseMoveEvent(QMouseEvent *e);
 
 
public slots:
    void showTime();
 
 
private:
     QPoint dragPosition;//用于保存鼠标点相对电子钟窗体左上角的偏移值
     bool showColon;//表示时间是否显示“:”
};
 
 
#endif // DIGICLOCK_H
 
 
digiclock.cpp
 
 
 
 
#include "digiclock.h"
#include <QPalette>
#include <QTimer>
#include <QTime>
#include <QTextEdit>
#include <QCoreApplication>
#include <QDateTime>
 
 
DigiClock::DigiClock(QWidget *parent)
    : QLCDNumber(parent)
{
    QPalette p = palette();//设置背景色
    p.setColor(QPalette::Window,Qt::blue);
    setPalette(p);
 
 
    setWindowFlags(Qt::FramelessWindowHint);
 
 
    setWindowOpacity(0.5);//设置窗体的透明度为0.5
 
 
   // QTextEdit *edit = new QTextEdit;
   // edit->setText("Splash Example");
  //  setCentralWidget(edit);
 
 
    resize(555,555);
    QDateTime n = QDateTime::currentDateTime();//让程序启动画面延迟的操作
    QDateTime now;
 
 
    do{
        now = QDateTime::currentDateTime();
        QCoreApplication::processEvents();
 
 
    }while(n.secsTo(now)<5);//
 
 
    QTimer *timer = new QTimer(this);
    connect(timer,SIGNAL(timeout()),this,SLOT(showTime()));
    timer->start(1000);//以1000毫秒为周期启动定时器
 
 
    showTime();//初试时间显示
 
 
    resize(150,60);
 
 
    showColon = true;
 
 
 
 
}
 
 
DigiClock::~DigiClock()
{
 
 
}
 
 
void DigiClock::showTime()
{
    QTime time = QTime::currentTime();
    QString text = time.toString("hh:mm");
    if(showColon)
    {
        text[2] = ':';
        showColon = false;
    }
    else
    {
        text[2] = ' ';
        showColon = true;
    }
    display(text);//显示转换好的字符串时间
}
 
 
void DigiClock::mousePressEvent(QMouseEvent *e)
{
    if(e->button() == Qt::LeftButton)
    {
        dragPosition = e->globalPos() - frameGeometry().topLeft();
        e->accept();
    }
    if(e->button() == Qt::RightButton)
    {
        close();
    }
}
 
 
void DigiClock::mouseMoveEvent(QMouseEvent *e)
{
    if(e->buttons() & Qt::LeftButton)
    {
        move(e->globalPos() - dragPosition);
        e->accept();
    }
}
 
 
main.cpp
 
 
 
 
#include "digiclock.h"
#include <QApplication>
#include <QPixmap>
#include <QSplashScreen>
 
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QPixmap pixmap(":/main.png");//让程序有启动画面
    QSplashScreen splash(pixmap);
    splash.show();
    a.processEvents();//使程序在显示启动画面的同时仍能响应鼠标等其他事件
    DigiClock w;
    w.show();
    splash.finish(&w);
    return a.exec();
}
运行效果:
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint)` 是一个 Qt 函数调用,用于将窗口设置为工具提示窗口,并且始终保持在顶部,并且窗口没有边框。这个函数可以在创建窗口时调用,也可以在运行时调用。 下面是一个使用 `setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint)` 的例子。在这个例子中,我们创建了一个简单的窗口,并将其设置为工具提示窗口、始终在顶部,并且没有边框: ```cpp #include <QtWidgets> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget window; window.setGeometry(100, 100, 200, 200); window.setWindowTitle("Tool Window"); window.show(); // Set the window to be a tool window, always on top, and frameless window.setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint); return app.exec(); } ``` 在上面的例子中,我们创建了一个名为 `window` 的 `QWidget` 对象,并通过 `setGeometry` 函数设置了窗口的位置和大小。随后,我们将窗口的标题设置为 `"Tool Window"`,并将其显示出来。最后,我们调用 `setWindowFlags` 函数,并将其参数设置为 `Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint`,以将窗口设置为工具提示窗口、始终在顶部,并且没有边框。 需要注意的是,如果您想取消窗口的 `Tool`、`WindowStaysOnTopHint`、`FramelessWindowHint` 标志位,可以使用 `clearMask(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint)` 函数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值