Qt浅谈之三十七界面文字显示动态化
来源:互联网 发布:mysql front 乱码 编辑:程序博客网 时间:2024/06/07 03:51
一、简介
最近项目中有需求:界面显示时所有的静态数据都以动态刷新的方式显示。在原来的代码上加上几个定时器QTimer就可以实现了,处理好showEvent和hideEvent事件(总体比较简单)。二、详解
1、代码
(1)processbardynamic.h#ifndef PROCESSBARDYNAMIC_H#define PROCESSBARDYNAMIC_H#include <QtGui>class ProcessbarDynamic : public QWidget{ Q_OBJECTpublic: ProcessbarDynamic(QWidget *parent = 0); ~ProcessbarDynamic();protected: void paintEvent(QPaintEvent *event); void resizeEvent (QResizeEvent * event); void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void showEvent(QShowEvent *event); void hideEvent(QHideEvent *event);private slots: void slotUpdateTimer(); void slotMoneyTimer();private: QPoint beginDrag; bool bPressFlag; QLabel *firstLabel; QLabel *secondLabel; QPushButton *closeBtn; QTimer *moneyTimer; QTimer *updateTimer; QProgressBar *progressBar; QLabel *progressBarLabel; QPushButton *sureBtn; int currentMoneyValue; int currentNumValue; int currentPercentValue;};#endif // PROCESSBARDYNAMIC_H(2)processbardynamic.cpp
#include "processbardynamic.h"#define MAXMONEY 660066#define MAXNUM 15#define MAXPERCENT 60ProcessbarDynamic::ProcessbarDynamic(QWidget *parent) : QWidget(parent, Qt::FramelessWindowHint) , bPressFlag(false) , currentMoneyValue(0) , currentNumValue(0) , currentPercentValue(0){ resize(300, 150); setAutoFillBackground(false); QPalette pal = palette(); pal.setColor(QPalette::Background, QColor(0xFF,0xFF,0xFF,0xFF)); setPalette(pal); firstLabel = new QLabel(this); firstLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); firstLabel->setText(tr("<font color='#666666'>%1</font><font color='#FC822B' size=4><b>$%2</b></font>").arg(tr("remainingmoney")).arg("0")); secondLabel = new QLabel(this); secondLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter); secondLabel->setText(QString("<font color='#666666'>%1</font><font color='#FC822B' size=4><b>%2</b></font><font color='#666666'>%3</font>").arg(tr("input")).arg(0).arg(tr("number"))); progressBar = new QProgressBar(this); progressBar->setRange(0, 100); progressBar->reset(); progressBar->setValue(0); progressBar->setTextVisible(false); progressBar->setStyleSheet("QProgressBar{border:none;background:#E5E5E5;border-radius:2px;}" "QProgressBar::chunk{background:#009DD6;border-radius:2px;}"); progressBarLabel = new QLabel(this); progressBarLabel->setStyleSheet("color:#333333;"); progressBarLabel->setAlignment(Qt::AlignCenter); progressBarLabel->setFont(QFont("arial", 10, QFont::Normal)); progressBarLabel->setText(QString("%1%").arg(0)); sureBtn = new QPushButton(this); sureBtn->setFont(QFont("arial", 10, QFont::Normal)); sureBtn->setStyleSheet("QPushButton{border:none;color:#FFFFFF;background:#009DD6;border-radius:4px;}" "QPushButton:hover{border-color:green;background:#00ACF0;}"); sureBtn->setFocusPolicy(Qt::NoFocus); sureBtn->setText(tr("sure")); moneyTimer = new QTimer(this); moneyTimer->setInterval(1); connect(moneyTimer, SIGNAL(timeout()), this, SLOT(slotMoneyTimer())); updateTimer = new QTimer(this); updateTimer->setInterval(20); connect(updateTimer, SIGNAL(timeout()), this, SLOT(slotUpdateTimer())); closeBtn = new QPushButton(this); closeBtn->setStyleSheet("QPushButton{background-image:url(:/close.png);border-style:flat;}" "QPushButton:hover{background-image:url(:/close_hover.png);border-style:flat;}"); closeBtn->setFocusPolicy(Qt::NoFocus); connect(closeBtn, SIGNAL(clicked()), this, SLOT(close()));}ProcessbarDynamic::~ProcessbarDynamic(){ if (updateTimer->isActive()) { updateTimer->stop(); } if (moneyTimer->isActive()) { moneyTimer->stop(); } currentMoneyValue = 0; currentNumValue = 0; currentPercentValue = 0;}void ProcessbarDynamic::slotUpdateTimer(){ if (currentNumValue <= MAXNUM) { secondLabel->setText(QString("<font color='#666666'>%1</font><font color='#FC822B' size=4><b>%2</b></font><font color='#666666'>%3</font>").arg(tr("input")).arg(currentNumValue).arg(tr("number"))); } if (currentPercentValue <= MAXPERCENT) { progressBar->setValue(currentPercentValue); progressBarLabel->setText(QString("%1%").arg(currentPercentValue)); } if (currentNumValue > MAXNUM && currentPercentValue > MAXPERCENT) { updateTimer->stop(); } currentNumValue++; currentPercentValue++;}void ProcessbarDynamic::slotMoneyTimer(){ if (currentMoneyValue <= MAXMONEY) { QString value = ""; int number = currentMoneyValue; if (number < 1000) { value = QString::number(number); } else if (number < 1000 * 1000) { value = QString::number(number/1000); value += ","; //QString temp = ""; //temp = QString::number(number%1000); //temp = temp.rightJustified(3,'0'); //temp.fill('0', 3); //temp.push_back(QString::number(number)); //temp = temp.right(3); value += QString("%1").arg(number%1000, 3, 10, QChar('0')); } else if (number < 1000*1000*1000) { value = QString::number(number/(1000*1000)); value += ","; number = number%(1000*1000); value += QString("%1").arg(number/1000, 3, 10, QChar('0')); value += ","; value += QString("%1").arg(number%1000, 3, 10, QChar('0')); } firstLabel->setText(tr("<font color='#666666'>%1</font><font color='#FC822B' size=4><b>$%2</b></font>").arg(tr("remainingmoney")).arg(value)); } if (currentMoneyValue == MAXMONEY){ moneyTimer->stop(); } currentMoneyValue = currentMoneyValue + 500; if (currentMoneyValue > MAXMONEY) { currentMoneyValue = MAXMONEY; }}void ProcessbarDynamic::paintEvent(QPaintEvent *event){ QWidget::paintEvent(event);}void ProcessbarDynamic::resizeEvent(QResizeEvent *event){ firstLabel->setGeometry(15, 25, 150, 30); secondLabel->setGeometry(165, 25, 120, 30); progressBar->setGeometry(15, 73, 230, 5); progressBarLabel->setGeometry(255, 62, 30, 25); sureBtn->setGeometry(15, 90, 270, 45); closeBtn->setGeometry(width() - 15, 5, 10, 10); move((QApplication::desktop()->width() - width())/2, (QApplication::desktop()->height() - height())/2); QWidget::resizeEvent(event);}void ProcessbarDynamic::showEvent(QShowEvent *event){ currentMoneyValue = 0; currentNumValue = 0; currentPercentValue = 0; updateTimer->start(); moneyTimer->start(); QWidget::showEvent(event);}void ProcessbarDynamic::hideEvent(QHideEvent *event){ if (updateTimer->isActive()) { updateTimer->stop(); } if (moneyTimer->isActive()) { moneyTimer->stop(); } QWidget::hideEvent(event);}void ProcessbarDynamic::mousePressEvent(QMouseEvent *event){ bPressFlag = true; beginDrag = event->pos(); QWidget::mousePressEvent(event);}void ProcessbarDynamic::mouseMoveEvent(QMouseEvent *event){ if (bPressFlag) { QPoint relaPos(QCursor::pos() - beginDrag); move(relaPos); } QWidget::mouseMoveEvent(event);}void ProcessbarDynamic::mouseReleaseEvent(QMouseEvent *event){ bPressFlag = false; QWidget::mouseReleaseEvent(event);}(3)main.cpp
#include "processbardynamic.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); QTranslator translator; translator.load("processbardynamic.qm",":/"); a.installTranslator(&translator); ProcessbarDynamic w; w.show(); return a.exec();}(4)运行(隐藏再显示也会重新动态显示)
三、总结
(1)上述代码难度不大,仅提供一种显示方式。测试代码已上传到CSDN:http://download.csdn.net/detail/taiyang1987912/9347839。(2)若有建议,请留言,在此先感谢!
2 0
- Qt浅谈之三十七界面文字显示动态化
- Qt浅谈之四十四动态显示日志(QGraphicsItem)
- Qt浅谈之拖拽文字图片
- Qt 界面图标显示,并显示文字注释
- Qt浅谈之三十四仿登录界面
- Qt浅谈之右下角浮出界面
- Qt浅谈之五十界面自定义
- QT在界面中显示动态图片
- [Qt]界面显示效果之卷轴
- Qt浅谈之十二:拖拽文字图片
- QT透明显示文字
- Qt显示界面旋转
- Qt浅谈之四十二钟表摆动显示百分比
- Qt应用程序文字显示不全
- QT之在toolButton中添加图标和文字,使文字显示在图标下方
- Qt浅谈之抓图截屏
- 界面的美化之动态显示gif图像logo
- QT 显示动态GIF
- Data Vault初探(六) —— 定期装载_Kettle_作业
- lua读取xml
- 分析类
- Android开发笔记(十七)GIF动画的实现GifAnimation
- 统计某个端口的访问量
- Qt浅谈之三十七界面文字显示动态化
- js和jQuery遍历json对象和数组
- [算法]KMP算法
- Html5(1)
- hax kernel module is not install
- Xcode清除编译缓存
- AlertDialog使用
- 不花钱开店 网上发布产品 最便宜的推广(第一章)
- 关于不是tableView怎么刷新数据