Slide 1

Slide 1 text

Introducing QtRuby Ynon Perek http://qtcollege.co.il Monday, August 6, 12

Slide 2

Slide 2 text

What is wrong with C++ Monday, August 6, 12

Slide 3

Slide 3 text

Non-Virtual By Default int main(int argc, char **argv) { Foo *f = new Bar(); // Calls Foo::doSomething by default f->doSomething(); } Monday, August 6, 12

Slide 4

Slide 4 text

Implicit Copy Ctor int printData( Foo f ) { } int printRef ( Foo& f ) { } int main(int argc, char **argv) { Foo f; printData( f ); printRef( f ); } Monday, August 6, 12

Slide 5

Slide 5 text

Implicit Type Coercion int printData( Foo f ) { } int printRef ( Foo& f ) { } int main(int argc, char **argv) { Foo f; // Convert to Foo printData( 5 ); } Monday, August 6, 12

Slide 6

Slide 6 text

Pointers float (SomeClass::*my_memfunc_ptr)(int, char *); Monday, August 6, 12

Slide 7

Slide 7 text

No Reflection Monday, August 6, 12

Slide 8

Slide 8 text

No Anonymous Functions Monday, August 6, 12

Slide 9

Slide 9 text

No Anonymous Functions • Function pointers don’t count Monday, August 6, 12

Slide 10

Slide 10 text

No Anonymous Functions • Function pointers don’t count • Functors don’t count Monday, August 6, 12

Slide 11

Slide 11 text

C++ Alternatives • Perl • Ruby • Java • Python Monday, August 6, 12

Slide 12

Slide 12 text

C++ Alternatives • Perl • Ruby • Java • Python they all got Monday, August 6, 12

Slide 13

Slide 13 text

Hello Qt require 'Qt' app = Qt::Application.new( ARGV ) w = Qt::Label.new( "Hello World" ) w.set_alignment( Qt::AlignHCenter | Qt::AlignVCenter ) w.show app.exec Monday, August 6, 12

Slide 14

Slide 14 text

DEMO: UI Designer Monday, August 6, 12

Slide 15

Slide 15 text

Qt Terminology • Signal specifies a semantic event Monday, August 6, 12

Slide 16

Slide 16 text

Qt Terminology • Signals are connected to slots which are the handling code Monday, August 6, 12

Slide 17

Slide 17 text

Designer Takeaways • Drag & Drop to create UI • Save as .ui file • Run: rbuic4 file.ui -x -o file_ui.rb • Use resulting .rb file but don’t modify it Monday, August 6, 12

Slide 18

Slide 18 text

Qt Actions require 'Qt' require './demo1_ui.rb' a = Qt::Application.new(ARGV) u = Ui_Form.new w = Qt::Widget.new u.setupUi(w) w.show u.btn1.connect( SIGNAL :clicked ) { u.list1.add_item( "Qt FTW" ) } a.exec Monday, August 6, 12

Slide 19

Slide 19 text

Qt Actions require 'Qt' app = Qt::Application.new( ARGV ) s1 = Qt::Slider.new( Qt::Horizontal ) s2 = Qt::Slider.new( Qt::Horizontal ) Qt::Object.connect( s1, SIGNAL("valueChanged(int)"), s2, SLOT( "setValue(int)") ) Qt::Object.connect( s2, SIGNAL("valueChanged(int)"), s1, SLOT( "setValue(int)") ) s1.show s2.show app.exec Monday, August 6, 12

Slide 20

Slide 20 text

Qt Stock Dialogs • Qt::MessageBox.about • Qt::FileDialog.get_open_file_name • Qt::FileDialog.get_save_file_name Monday, August 6, 12

Slide 21

Slide 21 text

Qt Stock Dialogs require 'Qt' require './demo1_ui.rb' a = Qt::Application.new(ARGV) u = Ui_Form.new w = Qt::Widget.new u.setupUi(w) w.show u.btn1.connect( SIGNAL :clicked ) { filename = Qt::FileDialog.get_open_file_name; u.list1.add_item( filename ) } a.exec Monday, August 6, 12

Slide 22

Slide 22 text

Q & A Monday, August 6, 12

Slide 23

Slide 23 text

QtRuby • Easy UI for your programs • Solid Foundations • Use existing Qt knowledge Monday, August 6, 12

Slide 24

Slide 24 text

Resources • Ruby Qt/KDE Guide http://techbase.kde.org/Development/ Languages/Ruby • Qt Tutorial Videos http://qt-project.org/videos Monday, August 6, 12

Slide 25

Slide 25 text

About Me • Ynon Perek • [email protected] • http://qtcollege.co.il Monday, August 6, 12