Qt窗口设置透明后按钮不能隐藏!!!

_Gx 2013-07-03 03:46:00
窗口设置了setAttribute(Qt::WA_TranslucentBackground, true);属性

让窗口透明后发现一个问题:窗口上的控件不能隐藏。

其实隐藏这个动作是有做的,但是操作发现隐藏之后控件还是可见的,但是不会响应事件了,

请问这是怎么回事呢?

大家设置的时候把

setAttribute(Qt::WA_TranslucentBackground, true);

放在

ui->setupUi(this);前面,否则窗口会看不见。

环境:ubuntu12 + Qt5
...全文
390 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
lufei93 2013-08-25
  • 打赏
  • 举报
回复
不知楼主解决没有?有其他方法设置透明吗?
_Gx 2013-07-05
  • 打赏
  • 举报
回复
引用 16 楼 u011012932 的回复:
[quote=引用 14 楼 q245879 的回复:] [quote=引用 13 楼 u011012932 的回复:] 是滴,我很早就遇到同样的问题,setAttribute(Qt::WA_TranslucentBackground)可以使不被绘制的部分显示透明,但是在最小化以后,窗体的部件就会失去焦点。
那你有没有解决这个问题呢?[/quote] 没有,我就尽量不去使用setAttribute(Qt::WA_TranslucentBackground);也没办法,反正用了它之后会出现很多问题,也不知道怎么回事![/quote] 现在是没有办法了,只能用这个。 再看看吧,希望有人有用到过,不然只能用蹩脚的方法了。
一去丶二三里 2013-07-05
  • 打赏
  • 举报
回复
引用 14 楼 q245879 的回复:
[quote=引用 13 楼 u011012932 的回复:] 是滴,我很早就遇到同样的问题,setAttribute(Qt::WA_TranslucentBackground)可以使不被绘制的部分显示透明,但是在最小化以后,窗体的部件就会失去焦点。
那你有没有解决这个问题呢?[/quote] 没有,我就尽量不去使用setAttribute(Qt::WA_TranslucentBackground);也没办法,反正用了它之后会出现很多问题,也不知道怎么回事!
_Gx 2013-07-05
  • 打赏
  • 举报
回复
再次UP一下。 @版主
_Gx 2013-07-04
  • 打赏
  • 举报
回复
引用 13 楼 u011012932 的回复:
是滴,我很早就遇到同样的问题,setAttribute(Qt::WA_TranslucentBackground)可以使不被绘制的部分显示透明,但是在最小化以后,窗体的部件就会失去焦点。
那你有没有解决这个问题呢?
一去丶二三里 2013-07-04
  • 打赏
  • 举报
回复
是滴,我很早就遇到同样的问题,setAttribute(Qt::WA_TranslucentBackground)可以使不被绘制的部分显示透明,但是在最小化以后,窗体的部件就会失去焦点。
_Gx 2013-07-04
  • 打赏
  • 举报
回复
引用 8 楼 cai6811376 的回复:
[quote=引用 7 楼 cai6811376 的回复:] 设置WA_TranslucentBackground会自动设置WA_NoSystemBackground 设置WA_NoSystemBackground又会使widget接收重绘事件不会自动重绘
不晓得我理解的对不对,求高手解答[/quote] 我觉得你分析的很在理。
_Gx 2013-07-04
  • 打赏
  • 举报
回复
引用 10 楼 Inhibitory 的回复:
[quote=引用 9 楼 q245879 的回复:] [quote=引用 6 楼 Inhibitory 的回复:]
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    Widget w;
    w.setWindowFlags(Qt::FramelessWindowHint);
    w.setAttribute(Qt::WA_TranslucentBackground);
    w.show();

    return app.exec();
}
这段代码是不能弹出透明的窗体的。[/quote] 先在Widget里画出一个圆解矩形,然后再显示
#include "Widget.hpp"
#include "ui_Widget.h"
#include <QDebug>
#include <QPainter>

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

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

void Widget::paintEvent(QPaintEvent *event) {
    Q_UNUSED(event);

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);

    painter.setBrush(Qt::blue);
    painter.drawRoundedRect(0, 0, 200, 200, 50, 50);
}
[/quote] 谢谢你的分享。 我是想问关于控件隐藏的问题。
Inhibitory 2013-07-03
  • 打赏
  • 举报
回复
引用 9 楼 q245879 的回复:
[quote=引用 6 楼 Inhibitory 的回复:]
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    Widget w;
    w.setWindowFlags(Qt::FramelessWindowHint);
    w.setAttribute(Qt::WA_TranslucentBackground);
    w.show();

    return app.exec();
}
这段代码是不能弹出透明的窗体的。[/quote] 先在Widget里画出一个圆解矩形,然后再显示
#include "Widget.hpp"
#include "ui_Widget.h"
#include <QDebug>
#include <QPainter>

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

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

void Widget::paintEvent(QPaintEvent *event) {
    Q_UNUSED(event);

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);

    painter.setBrush(Qt::blue);
    painter.drawRoundedRect(0, 0, 200, 200, 50, 50);
}
_Gx 2013-07-03
  • 打赏
  • 举报
回复
引用 6 楼 Inhibitory 的回复:
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    Widget w;
    w.setWindowFlags(Qt::FramelessWindowHint);
    w.setAttribute(Qt::WA_TranslucentBackground);
    w.show();

    return app.exec();
}
这段代码是不能弹出透明的窗体的。
xcyl 2013-07-03
  • 打赏
  • 举报
回复
引用 7 楼 cai6811376 的回复:
设置WA_TranslucentBackground会自动设置WA_NoSystemBackground 设置WA_NoSystemBackground又会使widget接收重绘事件不会自动重绘
不晓得我理解的对不对,求高手解答
xcyl 2013-07-03
  • 打赏
  • 举报
回复
设置WA_TranslucentBackground会自动设置WA_NoSystemBackground 设置WA_NoSystemBackground又会使widget接收重绘事件不会自动重绘
Inhibitory 2013-07-03
  • 打赏
  • 举报
回复
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    Widget w;
    w.setWindowFlags(Qt::FramelessWindowHint);
    w.setAttribute(Qt::WA_TranslucentBackground);
    w.show();

    return app.exec();
}
Inhibitory 2013-07-03
  • 打赏
  • 举报
回复
刚刚试了下,Qt 5.1 RC已经解决不规则窗口背景是黑色的问题,现在已经可以创建不规则窗体了。
_Gx 2013-07-03
  • 打赏
  • 举报
回复
现在有一个新的发现,当我调用窗体的resize去改变窗体大小时,控件就隐藏了。 可是调用update()或者repaint()则不会有任何效果。
_Gx 2013-07-03
  • 打赏
  • 举报
回复
引用 2 楼 numen27 的回复:
用void setWindowOpacity ( qreal level )函数吧,参数从1.0到0.0, 1.0表示不透明,0.0代表完全透明
这个会影响控件
numen27 2013-07-03
  • 打赏
  • 举报
回复
用void setWindowOpacity ( qreal level )函数吧,参数从1.0到0.0, 1.0表示不透明,0.0代表完全透明
_Gx 2013-07-03
  • 打赏
  • 举报
回复
up

16,240

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧