Class Helper
require 'Qt4'
#
class Helper
@background;
@circleBrush;
@textFont;
@circlePen;
@textPen;
#
def initialize
gradient = Qt::LinearGradient. new (Qt::PointF. new (50, -20), Qt::PointF. new (80, 20))
@background = Qt::Brush. new (Qt::Color. new (64, 32, 64))
@circleBrush = Qt::Brush. new (gradient)
@circlePen = Qt::Pen. new (Qt::black);
@circlePen.setWidth(1);
@textPen = Qt::Pen. new (Qt::white);
@textFont = Qt:: Font . new
@textFont.setPixelSize(50);
end
# ,
def paint(painter, event , elapsed)
painter.fillRect( event .rect(), @background)
painter.translate(100, 100)
painter.save();
painter.setBrush(@circleBrush);
painter.setPen(@circlePen);
painter.rotate(elapsed * 0.030);
r = elapsed/1000.0;
n = 30;
i = 0
while i < n do
i += 1
painter.rotate(30);
radius = 0 + 120.0*((i+r)/n)
circle_radius = 1 + ((i+r)/n)*20;
painter.drawEllipse(Qt::RectF. new (radius, -circle_radius, circle_radius*2, circle_radius*2))
end
painter.restore();
painter.setPen(@textPen);
painter.setFont(@textFont);
painter.drawText(Qt::Rect. new (-50, -50, 100, 100), Qt::AlignCenter, "Qt" );
end
end
* This source code was highlighted with Source Code Highlighter .
Class Widget
require 'Qt4'
# widget
# Qt::Widget
class Widget < Qt::Widget
#
#
@helper;
#
#
@elapsed;
#
def initialize(helper)
#
super()
#
@helper = helper
@elapsed = 0;
#
setFixedSize(200, 200);
end
# animate()
slots 'animate()'
# animate()
def animate()
@elapsed = @elapsed + sender().interval() % 1000;
repaint();
end
# override paintEvent
# repaint()
def paintEvent( event )
# Qt::Painter
painter = Qt::Painter. new
#
painter.begin(self);
painter.setRenderHint(Qt::Painter::Antialiasing);
# paint Helper
@helper.paint(painter, event , @elapsed);
#
painter.end();
end
end
* This source code was highlighted with Source Code Highlighter .
Class GlWidget
require 'Qt4'
# GLWidget OpenGL
# Qt::GLWidget
class GLWidget < Qt::GLWidget
#
#
@helper;
#
#
@elapsed;
#
def initialize(helper, parent)
#
super(Qt::GLFormat. new (Qt::GL::SampleBuffers), parent)
#
@helper = helper
@elapsed = 0;
#
setFixedSize(200, 200);
setAutoFillBackground( false );
end
# animate()
slots 'animate()'
# animate()
def animate()
@elapsed = @elapsed + sender().interval() % 1000;
repaint();
end
# override paintEvent
# repaint()
def paintEvent( event );
# Qt::Painter
painter = Qt::Painter. new
#
painter.begin(self);
painter.setRenderHint(Qt::Painter::Antialiasing);
# paint Helper
@helper.paint(painter, event , @elapsed);
#
painter.end();
end
end
* This source code was highlighted with Source Code Highlighter .
Class windowrequire 'Widget'
require 'g_l_widget'
require 'Qt4'
# window widet '
# Qt::Widget
class Window < Qt::Widget
#
#
@helper
#
def initialize(helper)
#
super()
#
@helper = helper
# widget' a
native = Widget. new (@helper);
open_g_l = GLWidget. new (@helper, self);
native_label = Qt::Label. new (tr( "Native" ));
native_label.setAlignment(Qt::AlignHCenter);
open_g_l_label = Qt::Label. new ( "OpenGL" );
open_g_l_label.setAlignment(Qt::AlignHCenter);
layout = Qt::GridLayout. new ;
layout.addWidget(native, 0, 0);
layout.addWidget(open_g_l, 0, 1);
layout.addWidget(native_label, 1, 0);
layout.addWidget(open_g_l_label, 1, 1);
setLayout(layout);
#
timer = Qt::Timer. new (self);
# timeout() animate()
#
connect(timer, SIGNAL( 'timeout()' ), native, SLOT( 'animate()' ));
connect(timer, SIGNAL( 'timeout()' ), open_g_l, SLOT( 'animate()' ));
#
timer.start(50);
setWindowTitle( "2D Painting on Native and OpenGL Widgets" );
end
end
* This source code was highlighted with Source Code Highlighter .
require 'helper'
require 'window'
require 'Qt4'
# Qt
app = Qt::Application. new (ARGV)
# Helper
helper = Helper. new
# widget'
widget = Window. new (helper)
#
widget.show
#
app.exec
* This source code was highlighted with Source Code Highlighter .
Source: https://habr.com/ru/post/68190/
All Articles