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 :slight_smile:
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

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>


#include <QLCDNumber>
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()
{

}

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

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 :sob:
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 :laughing:
Thanks trước cả nhà :heart_eyes:

3 Likes

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

4 Likes
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QBitmap>
#include <QPalette>
#include <QLCDNumber>
#include <QTimer>

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;
}

Thử coppy lại code của u mà bị lỗi :wink:
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 :grin:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?