Qt 窗体不变透明却变黑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt 窗体不变透明却变黑相关的知识,希望对你有一定的参考价值。

QPalette pa=palette(); pa.setColor(QPalette::Background,QColor(0x00,0xff,0x00,0x00)); setPalette(pa)
以上代码是从网上不能让窗体透明?为何?而且使窗口变黑?

参考技术A Background,QColor(0x00,0xff,0x00,0x00)
0x00,0xff,0x00,0x00改这个颜色值追问

怎么改?给个具体的数值,只要使窗口透明就行

追答

看下这个参考

参考资料:http://hi.baidu.com/dljaye/blog/item/5a466418f58ab20b34fa4174.html

参考技术B setWindowOpacity(0.5);

Qt开源作品18-无边框背景透明窗体

一、前言

用Qt来做无边框北京透明窗体非常简单,根本不需要用什么系统层的API来实现透明什么的,Qt本身提供了很多种设置窗体透明的方法,除了可以设置窗体的属性为透明以外,还可以设置透明度函数,以及qss来设置透明度颜色等,方法很多,按照需要可以选用自己最合适的办法,如果想要整个窗体的背景图类似于无边框的异行,你只需要准备一张美工做好的png带透明的背景图即可,直接用qss的形式设置为窗体的背景图,你也可以用painter绘制上去,这样就可以产生各种奇形怪状的异行窗体,比如中间挖个洞的背景图,可以直接穿透桌面。

二、代码思路

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);

    this->setAttribute(Qt::WA_TranslucentBackground);
    this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint);
    ui->widget->installEventFilter(this);
    ui->widget->setStyleSheet(QString("background-image:url(:/image/%1.png);").arg(1));
}

Widget::~Widget()
{
    delete ui;
}

bool Widget::eventFilter(QObject *watched, QEvent *evt)
{
    static int index = 1;
    static QPoint mousePoint;
    static bool mousePressed = false;

    QMouseEvent *event = static_cast<QMouseEvent *>(evt);
    if (event->type() == QEvent::MouseButtonPress) {
        if (event->button() == Qt::LeftButton) {
            mousePressed = true;
            mousePoint = event->globalPos() - this->pos();

            if (index == 5) {
                index = 1;
            } else {
                index++;
            }

            ui->widget->setStyleSheet(QString("background-image:url(:/image/%1.png);").arg(index));

            return true;
        } else {
            exit(0);
        }
    } else if (event->type() == QEvent::MouseButtonRelease) {
        mousePressed = false;
        return true;
    } else if (event->type() == QEvent::MouseMove) {
        if (mousePressed && (event->buttons() && Qt::LeftButton)) {
            this->move(event->globalPos() - mousePoint);
            return true;
        }
    }

    return QWidget::eventFilter(watched, event);
}

三、效果图

技术图片

四、开源主页

以上作品完整源码下载都在开源主页,会持续不断更新作品数量和质量,欢迎各位关注。

  1. 国内站点:https://gitee.com/feiyangqingyun/QWidgetDemo
  2. 国际站点:https://github.com/feiyangqingyun/QWidgetDemo
  3. 个人主页:https://blog.csdn.net/feiyangqingyun
  4. 知乎主页:https://www.zhihu.com/people/feiyangqingyun/

以上是关于Qt 窗体不变透明却变黑的主要内容,如果未能解决你的问题,请参考以下文章

c#中怎么才能父窗体中保持子窗体大小不变

qt 窗体透明,控件不透明

QT界面风格设置为‘同一个界面下有两个部分的窗体’

如何在悬停时使按钮内的文本透明?背景应该保持不变

Qt开源作品18-无边框背景透明窗体

Qt开源作品18-无边框背景透明窗体