Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: pakulo от Апрель 23, 2007, 17:25



Название: Прямоугольник с закругленными углами
Отправлено: pakulo от Апрель 23, 2007, 17:25
Как нарисовать прямоугольник с закругленными углами радиуса R.

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

 Мне нужно черного цвета с белым фона типа QBitmap


Название: Прямоугольник с закругленными углами
Отправлено: QCasper от Апрель 23, 2007, 18:01
QPainter::drawRoundRect ?


Название: Прямоугольник с закругленными углами
Отправлено: pakulo от Апрель 23, 2007, 18:08
это понятно... Я не знаю как это конвертнуть в QBitmap

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

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


Название: Прямоугольник с закругленными углами
Отправлено: QCasper от Апрель 23, 2007, 18:43
Цитата: "pakulo"
это понятно... Я не знаю как это конвертнуть в QBitmap

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

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

Код:

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

p.drawRoundRect(...);


?


Название: Прямоугольник с закругленными углами
Отправлено: pakulo от Апрель 23, 2007, 18:51
В том то и проблема, в класса QPainter, нету конструктора который принимает обьект  
QBitmap.


Название: Прямоугольник с закругленными углами
Отправлено: QCasper от Апрель 23, 2007, 18:54
ты окно чтоли обрезать собрался?

попробуй setMask()

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

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


Зато в QBitmap есть конструктор, который принимает QPixmap, можешь сначала на пиксмапе нарисовать.


Название: Прямоугольник с закругленными углами
Отправлено: pakulo от Апрель 23, 2007, 19:32
Да, нужно закруглить края окна...
Вот в мануале нашел, что можно рисовать на QPixmap, но не могу разобраться как оно рисует. можешь подкинуть примерчик?

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


Название: Прямоугольник с закругленными углами
Отправлено: Alex Custov от Апрель 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 от Апрель 24, 2007, 22:24
Спасибо огромное!!!

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

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

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

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

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

 Все, вопрос снят, нашел это setUpdatesEnabled(true);