Qt 6.3.1 桌面控件
digiclock.h
#ifndef DIGICLOCK_H
#define DIGICLOCK_H
#include <QLCDNumber>
#include <QObject>
#include <QTimer>
#include <QTime>
#include <QMouseEvent>
class DigiClock : public QLCDNumber
{
Q_OBJECT
public:
DigiClock(QWidget *parent=0);
void mousePressEvent(QMouseEvent *mouseEvent);
void mouseMoveEvent(QMouseEvent *mouseEvent);
private:
QPoint dragPosition; // 记录保存鼠标点相对位置电子时钟窗体左上角的偏移值
bool showColon; // 显示时间的“:”
public slots:
void showTime(); // 显示当前时间
};
#endif // DIGICLOCK_H
digiclock.cpp
#include "digiclock.h"
DigiClock::DigiClock(QWidget *parent) : QLCDNumber(parent)
{
QPalette p = palette();
p.setColor(QPalette::Window, Qt::blue);
setPalette(p);
setWindowFlags(Qt::FramelessWindowHint);
setWindowOpacity(0.5);
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(showTime()));
timer->start(1000);
showTime();
resize(150, 60);
showColon = true;
}
void DigiClock::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
{
dragPosition = event->globalPos() - frameGeometry().topLeft();
event ->accept();
}
if (event->button() == Qt::RightButton)
{
close();
}
}
void DigiClock::mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons() & Qt::LeftButton)
{
move(event->globalPos() - dragPosition);
event->accept();
}
}
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);
}
QPalette p = palette();p.setColor(QPalette::Window, Qt::blue);setPalette§;
用于显示窗体背景,设置为蓝色。
setWindowFlags(Qt::FramelessWindowHint);
设置窗体的标识,设置为没有面板边框和标题栏的窗体。
setWindowOpacity(0.5);
设置窗体透明度。
main.cpp
#include "digiclock.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
DigiClock clock;
// clock w;
clock.show();
return a.exec();
}
效果