Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: muaddib1981@mail.ru от Сентябрь 03, 2009, 13:19



Название: виджет произвольной формы
Отправлено: muaddib1981@mail.ru от Сентябрь 03, 2009, 13:19
Как создать виджет произвольной формы, например круглый?
Поискал в свойствах виджет ничего не вроде не нашел...


Название: Re: виджет произвольной формы
Отправлено: SABROG от Сентябрь 03, 2009, 13:22
http://vingrad.ru/blogs/sabrog/2009/01/10/qt-440-kak-prevratit-kartinku-v-okno-legko/


Название: Re: виджет произвольной формы
Отправлено: muaddib1981@mail.ru от Сентябрь 03, 2009, 14:32
не получается

Код:

#pragma once
#include <QtGui>

class CMainWindow:public QMainWindow
{
public:
CMainWindow(QString pathParam);
~CMainWindow(void);
private:
QString path;
QPixmap *pixmap;

    virtual void resizeEvent (QResizeEvent * event);
    virtual void paintEvent (QPaintEvent * event);
};

---------------------------


#include "MainWindow.h"

CMainWindow::CMainWindow(QString pathParam)
{
   path=pathParam;
   pixmap=new QPixmap("e:\\anyshape\\debug\\01.bmp");

}

CMainWindow::~CMainWindow(void)
{
}

void CMainWindow::resizeEvent (QResizeEvent * event)
{
    setMask(pixmap->mask());
};

void CMainWindow::paintEvent (QPaintEvent * event)
{
    QRegion r1(pixmap->rect());
    QPainter painter(this);

    painter.setClipRegion(r1);
    painter.drawPixmap(pixmap->rect(), *pixmap);

};


В окне рисуется картинка, форма окна не меняется


Название: Re: виджет произвольной формы
Отправлено: SABROG от Сентябрь 03, 2009, 16:02
Полагаю, что проблема в выборе формата картинки, .bmp против .png. Первый не поддерживает прозрачности, второй поддерживает. Если фон картинки в .bmp представлен каким-то сплошным цветом, то требуются дополнительные телодвижения, чтобы заставить Qt считать этот цвет - прозрачным.


Название: Re: виджет произвольной формы
Отправлено: SASA от Сентябрь 03, 2009, 17:49
Причём тут картинки???
В кострукторе окна создаём круглый регион.
Код:
QRegion  rgn( int 0, int 0, int 100, int 100, QRegion::Ellipse);
тут же его применяем
Код:
this->setMask(rgn);


Название: Re: виджет произвольной формы
Отправлено: SABROG от Сентябрь 03, 2009, 20:15
Причём тут картинки???

Я человеку ссылку дал на пример того, как окно принимает форму картинки. С кружочками то мы все умеем, а как дело доходит до скинов приложения, то эти виджеты почему-то всегда начинают принимать вид на основе рисунка.


Название: Re: виджет произвольной формы
Отправлено: muaddib1981@mail.ru от Сентябрь 04, 2009, 07:40
поменял на pgn, тот же результат. Черный полигон рисуется внутри окна прямоугольной формы.


Название: Re: виджет произвольной формы
Отправлено: SABROG от Сентябрь 04, 2009, 08:22
поменял на pgn, тот же результат. Черный полигон рисуется внутри окна прямоугольной формы.

Выложи картинку сюда.


Название: Re: виджет произвольной формы
Отправлено: muaddib1981@mail.ru от Сентябрь 04, 2009, 09:01
Как вставить картинку?


Название: Re: виджет произвольной формы
Отправлено: muaddib1981@mail.ru от Сентябрь 04, 2009, 09:02
Картинка по адресу: http://imageshost.ru/links/0b64cf9a627c5efa169e0dea9477dfa8


Название: Re: виджет произвольной формы
Отправлено: SABROG от Сентябрь 04, 2009, 12:47
Картинка по адресу: http://imageshost.ru/links/0b64cf9a627c5efa169e0dea9477dfa8

Вообще то я имел ввиду, что нужен оригинал картинки в .png формате, а не скриншот. Я хочу обедиться, что вокруг шейпа есть альфаканал. Приаттач её тупо здесь.


Название: Re: виджет произвольной формы
Отправлено: muaddib1981@mail.ru от Сентябрь 04, 2009, 15:05
Все заработало, когда в gimpe альфа-канал выставил. Спасибо.