高手帮忙:怎样让有以透明图片为背景的widget的子widget正常显示 ?

daniel851105 2010-04-13 05:31:23
例如有一张 透明背景的图片 background.png, 将其设为widget的背景图片,方法是
QPalette palette;
QPixmap img("background.png");
palette.setBrush(QPalette::Window, QBrush(img));
widget->setPalette(palette);

此时,这个widget可以正常显示,背景透明,但是如果在这个widget上添加子widget,例如QPushButton, QLabel , QPlainTextEdit,
这些子控件无法显示。请问这是什么原因,而且在父widget的paintEvent里的drawText方法也不能显示出字。如何能在透明widget上正常显示不透明的子widget ?谢谢您
...全文
403 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
同意LS,建议一些界面美化的用qss就可以了
tingsking18 2010-04-13
  • 打赏
  • 举报
回复
用qss
Aisy_D 2010-04-13
  • 打赏
  • 举报
回复
运行下面的代码:



#include <QApplication>
#include <QtGui>




class TMainWindow : public QWidget
{

public:
explicit TMainWindow(QWidget *parent = 0):
QWidget(parent ,Qt::FramelessWindowHint | Qt::WindowSystemMenuHint )
{

setWindowTitle(tr("TOOTzoe.com hzf...."));
setAttribute(Qt::WA_TranslucentBackground);

QPushButton *btn = new QPushButton(tr("我不透明...."));
connect(btn, SIGNAL(clicked()), this, SLOT(close()));

QTreeView *testWid = new QTreeView ;
QDirModel *dirModel = new QDirModel ;
testWid->setModel(dirModel);
testWid->setMinimumSize(700,500);

QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(btn , 0,Qt::AlignJustify);
mainLayout->addWidget(testWid, 1 , Qt::AlignCenter);
setLayout(mainLayout);
resize(800,600);
};

};



int main(int argc, char *argv[])
{
QApplication app(argc, argv);


QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

TMainWindow window ;

window.show();
qApp->setApplicationName(QObject::tr("TOOTzoe.com...."));
return app.exec();
}

16,201

社区成员

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

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