Qt浅谈之四十八窗口下方弹出提示信息
来源:互联网 发布:js获取手机屏幕宽度 编辑:程序博客网 时间:2024/06/05 11:38
一、简介
在项目中一般都会弹出新的子对话框显示提示信息,但对于一些因后台数据变化引发的提示还是在窗口下方弹出提示信息比较合理。点击按钮弹出提示信息,当鼠标放在提示信息对话框上时,暂停动画可长时间查看提示信息。
二、详解
1、代码
(1)faderwidget.h
#ifndef FADERWIDGET_H#define FADERWIDGET_H#include <QtGui>class faderwidget : public QWidget{ Q_OBJECTpublic: enum warning_type { error = 1, warning = 2, normal = 3 }; explicit faderwidget(QWidget *parent = 0); void showWarning(const warning_type &type, const QString &contents); void fixWarning(const bool &fix); void setMainWidget(QWidget* win);private: void setFixed(const bool &fix); bool isFixed() { return _fixed; }protected: void paintEvent(QPaintEvent *event); void enterEvent(QEvent *); void leaveEvent(QEvent *);private: QTimeLine *timeline; int changenumber; qreal view_width; qreal view_height; qreal picture_heigth; int status; int tip_change_rate; QString _content; QPixmap _tipsBox_error_left; QPixmap _tipsBox_error_center; QPixmap _tipsBox_error_right; QPixmap _tipsBox_note_left; QPixmap _tipsBox_note_center; QPixmap _tipsBox_note_right; QPixmap _tipsBox_succeed_left; QPixmap _tipsBox_succeed_center; QPixmap _tipsBox_succeed_right; bool _running; bool _fixed; QWidget* mainWidget;signals:private slots: void fade_on_fade_in(int counter); void receiveStatus(int,int,QString); void timeFinished();};#endif // FADERWIDGET_H(2)faderwidget.cpp
#include "faderwidget.h"faderwidget::faderwidget(QWidget *parent) : QWidget(parent) , _running(false) , _fixed(false) , status(3){ if (parent) { mainWidget = parent; this->view_width = mainWidget->width(); this->view_height = mainWidget->height(); setGeometry(QRect(0, -33, mainWidget->width(), 33)); } setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint); setStyleSheet("background-color:rgba(255,255,255,0)"); QTextCodec *codec = QTextCodec::codecForName("System"); QTextCodec::setCodecForLocale(codec); QTextCodec::setCodecForCStrings(codec); QTextCodec::setCodecForTr(codec); timeline=new QTimeLine(3000, this); timeline->setFrameRange(0,300); changenumber = 0; picture_heigth = 30; _tipsBox_error_center.load(":/tipsBox_error_center.png"); _tipsBox_note_center.load(":/tipsBox_note_center.png"); _tipsBox_succeed_center.load(":/tipsBox_succeed_center.png"); connect(timeline,SIGNAL(frameChanged(int)),this,SLOT(fade_on_fade_in(int))); connect(timeline, SIGNAL(finished()), this, SLOT(timeFinished())); hide();}void faderwidget::showWarning(const faderwidget::warning_type &type, const QString &contents){ receiveStatus(type, 20 , contents); this->setFocus();}void faderwidget::fixWarning(const bool &fix){ if (fix) setFixed(fix);}void faderwidget::setMainWidget(QWidget *win){ if (win) { mainWidget = win; this->view_width = mainWidget->width(); this->view_height = mainWidget->height(); setGeometry(QRect(0, -33, mainWidget->width(), 33)); }}void faderwidget::setFixed(const bool &fix){ _fixed = fix; if (!fix && timeline->state() == QTimeLine::Paused) timeline->resume();}void faderwidget::paintEvent(QPaintEvent *event){ QPainter painter(this); QPixmap pixmapTwo; QString string; switch (status){ case 1: pixmapTwo = _tipsBox_error_center; string=QString(tr("%1").arg(_content)); break; case 2: pixmapTwo = _tipsBox_note_center; string=QString(tr("%1").arg(_content)); break; case 3: pixmapTwo = _tipsBox_succeed_center; string=QString(tr("%1").arg(_content)); break; } painter.setPen(QPen(QColor(255,255,255))); pixmapTwo = pixmapTwo.scaled(view_width,picture_heigth); painter.drawPixmap(0,0,view_width,picture_heigth,pixmapTwo); int textWidth = painter.fontMetrics().width(string); if(textWidth < 1) return; if(textWidth < view_width) painter.drawText((view_width-textWidth)/2,20,string); if(textWidth > view_width) painter.drawText(0,20,string);}void faderwidget::fade_on_fade_in(int counter){ this->setVisible(true); changenumber=counter; if(changenumber<=10) { this->move(0,view_height-changenumber*picture_heigth/10); } else if(changenumber<250) { this->move(0,view_height-picture_heigth); if (_fixed) { timeline->setPaused(true); } } else if(changenumber<300) { this->move(0,view_height-3*picture_heigth+changenumber*picture_heigth/100); } else { timeline->stop(); this->setVisible(false); }}void faderwidget::receiveStatus(int status,int tip_change_rate,QString content){ if (_fixed) return; timeline->stop(); this->status = status; this->tip_change_rate = tip_change_rate; timeline->setUpdateInterval(this->tip_change_rate); timeline->setDuration(300*(this->tip_change_rate)); timeline->setCurrentTime(0); this->_content=content; timeline->start(); _running = true;}void faderwidget::timeFinished(){ _running = false;}void faderwidget::enterEvent(QEvent *){ if (_running) timeline->setPaused(true);}void faderwidget::leaveEvent(QEvent *){ if (_running) timeline->resume();}(3)widget.h
#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include "faderwidget.h"class Widget : public QWidget{ Q_OBJECTpublic: Widget(QWidget *parent = 0); ~Widget();private slots: void slotClicked();private: faderwidget *fw; QPushButton *btn;};#endif // WIDGET_H(4)widget.cpp
#include "widget.h"Widget::Widget(QWidget *parent) : QWidget(parent, Qt::FramelessWindowHint){ resize(400, 400); this->setStyleSheet("background:#19649F"); fw = new faderwidget(this); btn = new QPushButton(this); btn->move(150, 20); btn->setText(tr("click")); btn->setStyleSheet("background:yellow;color:#FF0000"); btn->setFocusPolicy(Qt::NoFocus); connect(btn, SIGNAL(clicked()), this, SLOT(slotClicked())); move(100, 100);}Widget::~Widget(){}void Widget::slotClicked(){ fw->showWarning(faderwidget::warning, tr("the information tips")); //fw->fixWarning(true); fw->show();}(5)main.cpp
#include "widget.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); Widget w; w.show(); return a.exec();}
三、总结
(1)上述代码还不完善,还需进一步优化,仅提供思路参考。(2)若有问题或建议,请留言,在此感谢!
1 0
- Qt浅谈之四十八窗口下方弹出提示信息
- java弹出窗口提示信息
- Struts2弹出信息提示窗口
- Struts2弹出信息提示窗口
- 不弹出提示信息关闭窗口
- ADF backingBean 弹出提示信息窗口
- 使用jq弹出提示窗口信息
- Qt浅谈之Qt各类位置信息
- 弹出信息提示窗口的代码;在Windows系统桌面右下角弹出友情提示窗口
- FLEX例子之弹出提示窗口(Alert)
- android 自定义POP window弹出窗口,用于信息提示
- 点击触摸屏按钮,qt程序弹出提示信息很慢!
- 弹出提示内容窗口
- 右下角弹出提示窗口
- UpdatePanel 弹出提示窗口
- 弹出提示窗口
- MyEclipse弹出提示窗口
- QT 弹出窗口
- 成员方法的反射
- 设计模式之工厂模式
- Day4-3.31
- Recylerview 加载更多功能实现(分页加载)
- 抽象类和接口的区别和联系【java】
- Qt浅谈之四十八窗口下方弹出提示信息
- 构造方法的反射应用
- JAVAEE学习笔记
- 历史上最伟大的12位程序员
- android音视频采集参考
- Java源码学习之Integer类(三)——好玩的位运算函数
- snort--byte_test,byte_jump用法
- 栈的应用举例
- 3-31博客