QT仿QQ动态新闻消息框 让消息框停靠在右下角
最近应项目需求实现了仿QQ动态新闻消息框 让消息框停靠在右下角,具体开发环境如下: (1).windows xp下安装QCreate(qt4.5.1) (2).虚拟机下安装CentOS5.2下安装QCreater(qtr4.5.1) 二者都是安装的SDK的开发界面。代码如下:形成3个文件,分别为Widget
最近应项目需求实现了仿QQ动态新闻消息框 让消息框停靠在右下角,具体开发环境如下:
(1).windows xp下安装QCreate(qt4.5.1)
(2). 虚拟机下安装 CentOS5.2下安装QCreater(qtr4.5.1) 二者都是安装的SDK的开发界面。
代码如下:
形成3个文件,分别为Widget.h,Widget.cpp和main.cpp文件,每个文件的代码如下:
Widget.h 为文件名
#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui/QWidget>
#include <QtGui/QLabel>
#include <QApplication>
#include <QTimer>
#include <QRect>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget();
virtual ~Widget();
public slots:
void PopUp();
private:
QLabel *m_pLabel;
QTimer *m_pTimer;
QRect m_Rect;
};
#endif // WIDGET_H
Widget.cpp 为文件名
#include <QtGui/QHBoxLayout>
#include <QDesktopWidget>
#include <QMoveEvent>
#include "widget.h"
int x,y;
Widget::Widget()
{
extern int x,y;
setWindowFlags(Qt::Dialog); //窗体没有最大化最小化按钮
setFixedSize(250, 100); //设置窗体的大小
setWindowTitle(trUtf8("信息提示")); //设置QWidget抬头信息 注意:这个在windows下显示乱码可能要用别的显示编码
m_Rect = QApplication::desktop()->rect(); //得到桌面的Rect
x = m_Rect.right() - width() - 2;
y = m_Rect.bottom() - 33;
//设置窗体上显示的文字
m_pLabel = new QLabel(this);
m_pLabel->setText(trUtf8(" 错误!")); 注意:这个在windows下显示乱码可能要用别的显示编码
QHBoxLayout * layout = new QHBoxLayout(this);
layout->addWidget(m_pLabel);
setLayout(layout);
//刷新渐变
m_pTimer = new QTimer();
connect(m_pTimer, SIGNAL(timeout()), this, SLOT(PopUp()));
m_pTimer->start(15);
PopUp();
}
Widget::~Widget()
{
}
//实现消息框的渐变弹出函数
void Widget::PopUp()
{
extern int x,y;
if (y >= m_Rect.bottom() - height() - 33)
y -= 1;
else
m_pTimer->stop();
setGeometry(x, y, height(), width());
}
main.cpp 为文件名
#include <QtGui/QApplication>
#include "widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
在QCreater中直接创建Project中的【Qt4 Gui Application】 点击【OK】按钮选择要创建文件的路径和创建的名字名字随便。
然后一直点击【Next】,再第四步选择基类为QWidget类,将Generate form里面的勾去掉,点击【Next】后,点击【Finish】
完成即创建完基本的代码,然后将上面的代码分别拷入对应的文件中,编译运行即可看到效果。
同时,我已完成窗体的向下缩退,以及点击窗体的时间就取消缩退功能,实现的代码就不往上写了。大家可以讨论。
另外,还有就是我在windows下没有想到好的方法实现显示与缩退之间的函数间隔,而Linux下直接用sleep就可以。同时我用的是虚拟机远程桌面开发的再windows下运行的时间正常,但是在虚拟机下的Linux运行时,显示不出这样的效果,不知道什么原因,也不知道真实机器上会不会也是这样的问题。
发两张图片仅供参考!!!!!!!!!!!!!!!
更多推荐
所有评论(0)