简体   繁体   中英

Editing frameless window in Qt

I've been created a frameless window in Qt that have widgets and background. but i have a problem in that form, when i resize form all widgets resize good but background not See this pic for demonstration

When no resize occured:

http://0000.2.img98.net/out.php/i20624_no-resize.jpg

when resize occured:

http://0000.2.img98.net/out.php/i20625_with-resize.jpg

and here is my code for creating Form:

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QPushButton>
#include <QLabel>
#include <QComboBox>
#include <QPixmap>
#include <QVBoxLayout>
#include <QPainter>
#include <QMouseEvent>
#include <QtGui>
#include <QSizeGrip>


class MyWidget : public QWidget {
Q_OBJECT
private:
    QPushButton* button;
    QLabel* label;
    QComboBox* combobox;
    QPixmap pixmap;

public:
    explicit MyWidget(QWidget *parent = 0)  : QWidget(parent, Qt::FramelessWindowHint)
 {

        // Create some controls
        button = new QPushButton();
        label = new QLabel();
        combobox = new QComboBox();


        QVBoxLayout* l = new QVBoxLayout();

        l->addWidget(button);
        l->addWidget(label);
        l->addWidget(combobox);


        QSizeGrip *grip = new QSizeGrip(parent);

        l->addWidget(grip, 0, Qt::AlignBottom | Qt::AlignRight);
         setLayout(l);


        resize (400, 500);

        setAttribute(Qt::WA_TranslucentBackground); // enable translucent background

                pixmap = QPixmap("./1.png");


}

protected:
    virtual void paintEvent (QPaintEvent* event) {
        QPainter painter(this);
         painter.setPen(Qt::NoPen);
         painter.setBrush(QColor(0, 0, 0, 0));
         QRect rec = pixmap.rect();
         painter.drawRect(this->rect());
         painter.drawPixmap(this->rect(), pixmap, rec);


}
private:
    bool pressed;
    QPoint mousePressPoint;

protected:
    virtual void mousePressEvent ( QMouseEvent * event ) {
        QWidget::mousePressEvent(event);
        if (!pressed) {
            pressed = true;
            mousePressPoint = event->pos();
        }
    }

 #endif // MYWIDGET_H

Since your controls are centered in the window but don't look like they are, it might indicate that there is a transparent border around the non-transparent part of the image you are using as background.

You can remove the transparency from the brush in paintEvent to confirm that, with, for example:

painter.setBrush(QColor(0, 0, 0, 255));

To be more clear, the problem is not in your code, but in the image : open the image with an editor, select only the non-transparent part, keep only that part by using the "cropping tool", and finally save the image.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM