Qt之透明提示框

代码来自 http://blog.sina.com.cn/s/blog_a6fb6cc90101az3h.html

Qt实现类似QQ的登录失败的提示框,主要涉及窗口透明并添加关闭按钮,以及图标和信息的显示等。

直接上代码:

 

#ifndef ERRORWIDGET_H
#define ERRORWIDGET_H

#include <QtGui/QWidget>
#include <QtGui>

class ErrorWidget : public QWidget
{
    Q_OBJECT

public:
    ErrorWidget(QWidget *parent = 0);
    ~ErrorWidget();
    void setTipInfo(QString info);
    void setTipIcon(QPixmap pixmap);

private:
    QToolButton *close_button;
    QLabel *msg_label;
    QLabel *ask_label;

private slots:
    bool closeWidget();

};

#endif // ERRORWIDGET_H


 

#include "errorwidget.h"
#include <QDebug>

ErrorWidget::ErrorWidget(QWidget *parent)
 : QWidget(parent)
{

    int width = parent->width();
    this->resize(width, 28);
    //设置标题栏隐藏
    this->setWindowFlags(Qt::FramelessWindowHint);
    //设置背景色透明
    QPalette palette;
    QColor color(190, 230, 250);
    color.setAlphaF(0.6);
    palette.setBrush(this->backgroundRole(), color);
    this->setPalette(palette);
    //如果这个QWidget直接show,是有背景色的,但是如果放到一个父Widget中时,它就没有了效果。添加如下代码后就可以了:
    this->setAutoFillBackground(true);

    //构建关闭按钮
    close_button= new QToolButton(this);
    QPixmap close_pix = style()->standardPixmap(QStyle::SP_TitleBarCloseButton);
    close_button->setIcon(close_pix);
    close_button->setStyleSheet("QToolButton{background-color: transparent;}");

    //获取主界面的宽度
    int height = this->height();
    close_button->setGeometry(width-20, 0, 20, 20);
    //设置提示图片
    msg_label = new QLabel(this);
    msg_label->setGeometry(QRect(5, 5, 20, 20));
    msg_label->setStyleSheet("background-color: transparent;");
    msg_label->setScaledContents(true);
    //设置提示信息
    ask_label = new QLabel(this);
    ask_label->setStyleSheet("background-color: transparent; color: red;");
    ask_label->setGeometry(QRect(30, 0, width - 60, height));
    ask_label->setAlignment(Qt::AlignCenter);
    close_button->setCursor(Qt::PointingHandCursor);
    QObject::connect(close_button, SIGNAL(clicked()), this, SLOT(closeWidget()));

/*    QHBoxLayout *hLayout = new QHBoxLayout;
    hLayout->addWidget(msg_label);
    hLayout->addWidget(ask_label);
    hLayout->addWidget(close_button);
    setLayout(hLayout); */
}

ErrorWidget::~ErrorWidget()
{
 //Setting::freePointer(ask_label);
 //Setting::freePointer(msg_label);
 //Setting::freePointer(close_button);
}

void ErrorWidget::setTipInfo(QString info)
{
 //设置提示信息
 ask_label->setText(info);
}
void ErrorWidget::setTipIcon(QPixmap pixmap)
{
 msg_label->setPixmap(pixmap);
}

//关闭按钮主要进行提示框的隐藏
bool ErrorWidget::closeWidget()
{
 this->hide();
 return true;
}

 

#include <QtGui/QApplication>
#include "dialog.h"
#include "errorwidget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QPushButton *bt1 = new QPushButton("test");
    bt1->setFixedSize(300, 200);
    ErrorWidget *error = new ErrorWidget(bt1);
    error->setTipInfo("<font color=green>error</font>");
    bt1->show();
    return a.exec();
}


 

提示框透明,且包含提示图标,关闭按钮等!

所以自己也可以利用Qt中的QWidget创建一个提示框,在构建的时候设置背景透明,但是进行窗口隐藏,使用hide()(之所以隐藏是因为登录的时候不显示,只有在登录失败的时候才显示,即调用show()),再登录失败之后调用setTipIcon(QPixmap pixmap)设置图标和setTipInfo(QString info)设置提示信息即可。

 

   //进行错误提示
   QPixmap pixmap = QPixmap(":/icon/errortip");
   error_widget->setTipIcon(pixmap);
   error_widget->setTipInfo(info);
   if(error_widget->isHidden())
   {
    error_widget->show();
   }

 


posted @ 2013-09-10 22:49  今晚打酱油_  阅读(1100)  评论(0编辑  收藏  举报