Редактирование безрамного окна в Qt - PullRequest
1 голос
/ 24 августа 2011

Я создал безрамное окно в Qt с виджетами и фоном. но у меня есть проблема в этой форме, когда я изменяю размер формы все виджеты изменяют размер хорошо, но фон не Смотрите эту картинку для демонстрации

Когда изменение размера не произошло:

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

при изменении размера:

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

и вот мой код для создания формы:

#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

1 Ответ

1 голос
/ 24 августа 2011

Так как ваши элементы управления центрированы в окне, но выглядят не так, это может указывать на наличие прозрачной границы вокруг непрозрачной части изображения, которое вы используете в качестве фона.

Вы можете удалить прозрачность с кисти в paintEvent, чтобы подтвердить это, например, с помощью:

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

Чтобы быть более понятным, проблема не в вашем коде, а в изображении : откройте изображение в редакторе, выберите только непрозрачную часть, оставьте только эту часть, используя " инструмент обрезки "и, наконец, сохранить изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...