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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Прямоугольник с закругленными углами  (Прочитано 12400 раз)
pakulo
Гость
« : Апрель 23, 2007, 17:25 »

Как нарисовать прямоугольник с закругленными углами радиуса R.

добавлено спустя 4 минуты:

 Мне нужно черного цвета с белым фона типа QBitmap
Записан
QCasper
Гость
« Ответ #1 : Апрель 23, 2007, 18:01 »

QPainter::drawRoundRect ?
Записан
pakulo
Гость
« Ответ #2 : Апрель 23, 2007, 18:08 »

это понятно... Я не знаю как это конвертнуть в QBitmap

добавлено спустя 1 минуту:

 или даже лучше типа QRegion
Записан
QCasper
Гость
« Ответ #3 : Апрель 23, 2007, 18:43 »

Цитата: "pakulo"
это понятно... Я не знаю как это конвертнуть в QBitmap

добавлено спустя 1 минуту:

 или даже лучше типа QRegion

Код:

QBitmap bmp();
QPainter p(&bmp);

p.drawRoundRect(...);


?
Записан
pakulo
Гость
« Ответ #4 : Апрель 23, 2007, 18:51 »

В том то и проблема, в класса QPainter, нету конструктора который принимает обьект  
QBitmap.
Записан
QCasper
Гость
« Ответ #5 : Апрель 23, 2007, 18:54 »

ты окно чтоли обрезать собрался?

попробуй setMask()

добавлено спустя 1 минуту:

 
Цитата: "pakulo"
В том то и проблема, в класса QPainter, нету конструктора который принимает обьект  
QBitmap.


Зато в QBitmap есть конструктор, который принимает QPixmap, можешь сначала на пиксмапе нарисовать.
Записан
pakulo
Гость
« Ответ #6 : Апрель 23, 2007, 19:32 »

Да, нужно закруглить края окна...
Вот в мануале нашел, что можно рисовать на QPixmap, но не могу разобраться как оно рисует. можешь подкинуть примерчик?

А вообще, какой способ будет лучше? Нарисовать Bitmap и при изменении размеров окна, изменять размеры Bitmap и делать снова setMask() или делать лучше через QRegion, как быстрее? или это одно и тоже?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Апрель 24, 2007, 10:26 »

блин, как это в мануале не нашёл ? Улыбающийся

Например
Код:

#include <qapplication.h>
#include <qwidget.h>
#include <qbitmap.h>
#include <qpainter.h>

class MoveMe : public QWidget
{
public:
    MoveMe( QWidget *parent=0, const char *name=0, WFlags f = 0)
    :QWidget(parent,name, f)

    {
        setAutoMask(true);
    }

protected:
    void updateMask()
    {
        QBitmap bm(width(), height());
        bm.fill(Qt::color0);

        QPainter p(&bm);

        p.setBrush(Qt::color1);

        p.drawRoundRect(0, 0, width(), height());

        setMask(bm);
    }
};

int main( int argc, char **argv )
{
    QApplication a( argc, argv );

    MoveMe w(0,0);

    w.resize(320, 200);

    w.show();

    a.setMainWidget(&w);

    return a.exec();

}
Записан
pakulo
Гость
« Ответ #8 : Апрель 24, 2007, 22:24 »

Спасибо огромное!!!

добавлено спустя 4 минуты:

 По какому запросу нашел в мануале эту инфу?

добавлено спустя 2 часа:

 Это для QTv3, какая замена setAutoMask(true) ? в 4?
Просто если запустить, то не срабатывает сразу updateMask, пока его в конструкторе не вызову и когда делаю ресайз, тоже не срабатывает, хотя можно и обработать изменение размеров, подскажите как можно сделать что бы этого избежать.

добавлено спустя:

 Все, вопрос снят, нашел это setUpdatesEnabled(true);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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