QT仿QQ动态新闻消息框 让消息框停靠在右下角

 

      最近应项目需求实现了仿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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中,弹出消息提示是通过使用QMessageBox类来实现的。然而,默认情况下,QMessageBox会在主线程中创建并显示消息。如果您想要在子线程中弹出消息提示,可以使用Qt的信号与槽机制来实现。 首先,您需要在主线程中创建一个QObject的子类来处理消息提示的弹出操作,例如命名为MessageHandler。在MessageHandler类中,您可以定义一个槽函数来弹出消息提示: ```cpp class MessageHandler : public QObject { Q_OBJECT public slots: void showMessage(const QString& message) { QMessageBox::information(nullptr, "Message", message); } }; ``` 接下来,在子线程中创建一个QObject的子类来触发消息提示的弹出操作,例如命名为Worker。在Worker类中,您可以定义一个信号来触发弹出消息提示的槽函数: ```cpp class Worker : public QObject { Q_OBJECT signals: void showMessageSignal(const QString& message); public slots: void doWork() { // 执行一些工作... // 触发弹出消息提示的信号 emit showMessageSignal("Hello from worker thread!"); } }; ``` 然后,在主线程中创建MessageHandler和Worker对象,并将它们连接起来: ```cpp QThread* thread = new QThread; Worker* worker = new Worker; MessageHandler* messageHandler = new MessageHandler; // 将Worker对象移动到子线程中 worker->moveToThread(thread); // 连接Worker对象的信号和MessageHandler对象的槽函数 connect(worker, SIGNAL(showMessageSignal(QString)), messageHandler, SLOT(showMessage(QString))); // 启动子线程 thread->start(); // 在子线程中执行工作 QMetaObject::invokeMethod(worker, "doWork", Qt::QueuedConnection); ``` 这样,当在子线程中执行工作时,可以通过发射信号来触发在主线程中弹出消息提示的槽函数。 希望这对您有所帮助!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值