30/09/2018, 22:25

Làm thế nào để tạo Form trong suốt với Qt

Mình mới tự học về Qt được khoảng 2 ngày
Mình thử tạo một cái đồng hồ có nền trong suốt giống như hướng dẫn ở đây :
http://www.codeprogress.com/cpp/libraries/qt/showQtExample.php?index=191&key=QMainWindowTransparentBg

File mainwindow.cpp

[code]#include “mainwindow.h”
#include “ui_mainwindow.h”
#include

#include
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

this->setAttribute( Qt::WA_TranslucentBackground );
 this->setWindowTitle(QString::fromUtf8("QMainWindow Transparent Background"));
  this->resize(800, 250);

QLCDNumber *number = new QLCDNumber();
    number->setFixedSize(800, 245);
    number->setDigitCount(12);
    number->display(QTime::currentTime().toString(QString("hh:mm:ss.zzz")));


    this->setCentralWidget(number);

}

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

void MainWindow::on_pushButton_clicked()
{

}[/code]

Kết quả khi chay chương trình

Khi mình thử chạy chương trình thì nó ra một cái nền đen xì rất chi là xấu ,chứ không có trong suốt như trong demo hướng dẫn
Mình đã thử Google và làm thêm vài cách nữa nhưng vẫn cái nền đen xì đó !
Bạn nào biết lỗi này là gì không và hướng dẫn mình fix với
Thanks trước cả nhà

... viết 00:29 ngày 01/10/2018

To make transparency work, image used for custom shape must have alpha layer and unwanted sections must be made transparent.

http://www.codeprogress.com/cpp/libraries/qt/showQtExample.php?key=QMainWindowPartialTransparent&index=145

The Wind viết 00:38 ngày 01/10/2018

[code]#include “mainwindow.h”
#include “ui_mainwindow.h”
#include
#include
#include
#include

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setMask((new QBitmap(“E:/white.png”))->mask());
QPalette *palette = new QPalette();
palette->setBrush(QPalette::Background, QBrush(QPixmap(“E:/white.png”)));
this->setPalette(*palette);
this->setAttribute( Qt::WA_TranslucentBackground );
this->setWindowFlags(Qt::FramelessWindowHint);

QLCDNumber *lcd = new QLCDNumber();
lcd->setFixedSize(800,245);
lcd->setDigitCount(12);
lcd->display(QTime::currentTime().toString(QString("hh:mm:ss.zzz")));

this->setCentralWidget(lcd);
}

MainWindow::~MainWindow()
{
delete ui;
}
[/code]

Thử coppy lại code của u mà bị lỗi
Nhưng k quan trong lắm ! Tại tôi chỉ cần cái nền trong suốt là đc thui.Còn lại hum nào nghịch sau !
Thanks ha

Bài liên quan
0