#include "widget.h"
#include "ui_widget.h"
#include <qpainter.h>
#include <QMouseEvent>
#include <QPaintEvent>
#include <QMessageBox>
#include <QMenu>
#include <QSqlQueryModel>
#include <QTableView>
#include <QDateTime>
#include <QScreen>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->setWindowFlag(Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);
this->setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
// init
this->isStart = false;
this->timer = new QTimer;
this->timeRecord = new QTime(0, 0, 0);
// connect timer and SLOT function
connect(this->timer,SIGNAL(timeout()),this,SLOT(update_time()));
// menu
this->setContextMenuPolicy(Qt::CustomContextMenu);
}
Widget::~Widget()
{
delete ui;
}
void Widget::mousePressEvent(QMouseEvent* ev)
{
if(ev->button()==Qt::LeftButton)
{
pos=ev->pos();
}
}
void Widget::mouseMoveEvent(QMouseEvent*ev)
{
if(ev->buttons()==Qt::LeftButton)
{
int x,y;
x=ev->pos().x()-pos.x();
y=ev->pos().y()-pos.y();
this->move(this->x()+x,this->y()+y);
}
}
void Widget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPixmap pixmap;
pixmap.load(QString("../TaskTimer/image/pikakun.png"));
painter.drawPixmap(0, 0, 128, 128, pixmap);
}
void Widget::on_start_btn_clicked()
{
if(this->ui->todo_line->text().trimmed().length() == 0 )
{
QMessageBox::warning(this, tr("warning"), tr("please input todo first!"), QMessageBox::Yes);
this->ui->todo_line->setFocus();
return;
}
this->ui->todo_line->setEnabled(false);
this->ui->last_log->setPlainText(QString("Mission " + this->ui->todo_line->text().trimmed() + " is timing..."));
if(!this->isStart)
{
this->timer->start(128);
this->ui->start_btn->setText(QString("Pause"));
}
else
{
this->timer->stop();
this->ui->start_btn->setText(QString("Continue"));
}
this->isStart = !this->isStart;
}
void Widget::update_time()
{
// timer add 1 secs, and then display
*this->timeRecord = this->timeRecord->addMSecs(128);
this->ui->timer->display(this->timeRecord->toString(QString("hh:mm:ss.zzz")));
}
void Widget::on_end_btn_clicked()
{
// stop timer
this->timer->stop();
// show log
this->ui->last_log->setPlainText(
QString(
this->ui->todo_line->text() +
" Cost Time " +
this->timeRecord->toString(QString("hh:mm:ss.zzz"))
)
);
// save db
QSqlDatabase::database().transaction();
QSqlQuery query;
query.prepare(QString("insert into task_history(task_name, cost_time, create_time ) "
"values(:task_name, :cost_time,:create_time)"));
query.bindValue(":task_name", this->ui->todo_line->text());
query.bindValue(":cost_time", this->timeRecord->toString(QString("hh:mm:ss.zzz")));
QDateTime dt =QDateTime::currentDateTime();
// format yyyy//MM/dd hh:mm:s.zzz
QString create_time = dt.toString("yyyy-MM-dd hh:mm:ss.zzz");
query.bindValue(":create_time", create_time);
if(!query.exec())
{
qDebug() << "insert into task_history error: " << query.lastError().text();
}
QSqlDatabase::database().commit();
// reset display
this->timeRecord->setHMS(0,0,0);
this->ui->timer->display(this->timeRecord->toString(QString("hh:mm:ss.zzz")));
this->isStart = false;
this->ui->start_btn->setText(QString("Start"));
// reset todo_line
this->ui->todo_line->clear();
this->ui->todo_line->setEnabled(true);
this->ui->todo_line->setFocus();
}
void Widget::get_todo_summary()
{
QSqlQueryModel *model = new QSqlQueryModel(this);
model->setQuery("select * from task_history");
model->setHeaderData(0, Qt::Horizontal, tr("ID"));
model->setHeaderData(1, Qt::Horizontal, tr("Task"));
model->setHeaderData(2, Qt::Horizontal, tr("Time"));
model->setHeaderData(3, Qt::Horizontal, tr("LogTime"));
QTableView *view = new QTableView;
view->setWindowTitle(QString("summary"));
view->setModel(model);
// must after setModel
view->setColumnWidth(1,250);
view->setColumnWidth(3,150);
QSize *min_size = new QSize;
min_size->setWidth(620);
min_size->setHeight(400);
view->setMinimumSize(*min_size);
QScreen *screen = QApplication::primaryScreen();
QSize screenSize = screen->size();
view->move(( screenSize.width() - min_size->width() ) / 2 , ( screenSize.height() - view->height() ) / 2 );
view->show();
// free mem
delete min_size;
}
void Widget::on_Widget_customContextMenuRequested(const QPoint &pos)
{
QMenu *menu = new QMenu(this);
QAction *summary = new QAction( QIcon(QString("../TaskTimer/image/pikakun.png")),tr("summary"), this);
menu->addAction(summary);
connect(summary, SIGNAL(triggered()), this, SLOT(get_todo_summary()));
menu->exec(cursor().pos());
}
没有合适的资源?快使用搜索试试~ 我知道了~
TaskTimerV1
![preview](https://csdnimg.cn/release/downloadcmsfe/public/img/white-bg.ca8570fa.png)
共28个文件
sample:12个
h:2个
cpp:2个
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
0 下载量 190 浏览量
2023-10-02
17:03:35
上传
评论
收藏 322KB ZIP 举报
温馨提示
a Task Timer Implemented By Qt6
资源推荐
资源详情
资源评论
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![exe](https://img-home.csdnimg.cn/images/20210720083343.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![dll](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![exe](https://img-home.csdnimg.cn/images/20210720083343.png)
收起资源包目录
![package](https://csdnimg.cn/release/downloadcmsfe/public/img/package.f3fc750b.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/PNG.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
共 28 条
- 1
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/a58b89a48cd34939af1e321d6e9cf01b_weixin_47560078.jpg!1)
余衫马
- 粉丝: 1505
- 资源: 18
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)