zoukankan      html  css  js  c++  java
  • 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();
       }

     


  • 相关阅读:
    AMD 开源照片级渲染引擎 Radeon ProRender
    删除集群mds
    删除集群mds
    一次旅途她和豆浆结缘,如今拥有70多家加盟店
    小伙居然开网店卖花,整整一年时间他做出了400万元的业绩
    带着800元现金开始创业,居然开出了十几家连锁超市
    北大学霸从小米离职,靠眼镜打开亿万市场
    广西农民靠养猪发家致富,采用新模式既有效益又保护生态
    在母婴产品领域他独领风骚,利润已经突破了1亿
    80后小伙白手起家做照明生意,为他创造了六千万元的业绩
  • 原文地址:https://www.cnblogs.com/xj626852095/p/3648107.html
Copyright © 2011-2022 走看看