• 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();
       }

     


  • 相关阅读:
    C#删除只读文件
    在超链接href中实现form的提交
    C#中复制数组
    C#判断字符串中是否包含一个子字符串是可以直接使用Contains()方法
    C#使用System.xml.linq来生成XML文件
    C# 获取SHA256码
    C#中要使ListBox使用AddRange()时,能够触发SelectedValueChanged事件
    报错:[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop bei
    elementUI el-select 中disabled设置
    实现element-ui中table点击一行展开
  • 原文地址:https://www.cnblogs.com/xj626852095/p/3648107.html
Copyright © 2020-2023  润新知