Russian Qt Forum
Ноябрь 08, 2024, 21:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: виджет произвольной формы  (Прочитано 9082 раз)
muaddib1981@mail.ru
Гость
« : Сентябрь 03, 2009, 13:19 »

Как создать виджет произвольной формы, например круглый?
Поискал в свойствах виджет ничего не вроде не нашел...
Записан
SABROG
Гость
« Ответ #1 : Сентябрь 03, 2009, 13:22 »

http://vingrad.ru/blogs/sabrog/2009/01/10/qt-440-kak-prevratit-kartinku-v-okno-legko/
Записан
muaddib1981@mail.ru
Гость
« Ответ #2 : Сентябрь 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);

};


В окне рисуется картинка, форма окна не меняется
Записан
SABROG
Гость
« Ответ #3 : Сентябрь 03, 2009, 16:02 »

Полагаю, что проблема в выборе формата картинки, .bmp против .png. Первый не поддерживает прозрачности, второй поддерживает. Если фон картинки в .bmp представлен каким-то сплошным цветом, то требуются дополнительные телодвижения, чтобы заставить Qt считать этот цвет - прозрачным.
Записан
SASA
Гость
« Ответ #4 : Сентябрь 03, 2009, 17:49 »

Причём тут картинки???
В кострукторе окна создаём круглый регион.
Код:
QRegion  rgn( int 0, int 0, int 100, int 100, QRegion::Ellipse);
тут же его применяем
Код:
this->setMask(rgn);
Записан
SABROG
Гость
« Ответ #5 : Сентябрь 03, 2009, 20:15 »

Причём тут картинки???

Я человеку ссылку дал на пример того, как окно принимает форму картинки. С кружочками то мы все умеем, а как дело доходит до скинов приложения, то эти виджеты почему-то всегда начинают принимать вид на основе рисунка.
Записан
muaddib1981@mail.ru
Гость
« Ответ #6 : Сентябрь 04, 2009, 07:40 »

поменял на pgn, тот же результат. Черный полигон рисуется внутри окна прямоугольной формы.
Записан
SABROG
Гость
« Ответ #7 : Сентябрь 04, 2009, 08:22 »

поменял на pgn, тот же результат. Черный полигон рисуется внутри окна прямоугольной формы.

Выложи картинку сюда.
Записан
muaddib1981@mail.ru
Гость
« Ответ #8 : Сентябрь 04, 2009, 09:01 »

Как вставить картинку?
Записан
muaddib1981@mail.ru
Гость
« Ответ #9 : Сентябрь 04, 2009, 09:02 »

Картинка по адресу: http://imageshost.ru/links/0b64cf9a627c5efa169e0dea9477dfa8
Записан
SABROG
Гость
« Ответ #10 : Сентябрь 04, 2009, 12:47 »


Вообще то я имел ввиду, что нужен оригинал картинки в .png формате, а не скриншот. Я хочу обедиться, что вокруг шейпа есть альфаканал. Приаттач её тупо здесь.
Записан
muaddib1981@mail.ru
Гость
« Ответ #11 : Сентябрь 04, 2009, 15:05 »

Все заработало, когда в gimpe альфа-канал выставил. Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.141 секунд. Запросов: 21.