最近应项目需求实现了仿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运行时,显示不出这样的效果,不知道什么原因,也不知道真实机器上会不会也是这样的问题。

      发两张图片仅供参考!!!!!!!!!!!!!!!

 

 

 

 

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐