Slide 1

Slide 1 text

Back To The Desktop Ynon Perek http://qtcollege.co.il Monday, June 25, 12

Slide 2

Slide 2 text

WHY ? Monday, June 25, 12

Slide 3

Slide 3 text

Desktop Apps • Office • Web Browser • Skype • IDE • Torrent / FTP Client Monday, June 25, 12

Slide 4

Slide 4 text

So You Want To Write A Ruby Desktop App ... Monday, June 25, 12

Slide 5

Slide 5 text

Mature and Widely Used • Choosing a widely used framework ensures that you won’t run into bumps when scaling up • Choosing a framework with future ensures it won’t suddenly disappear Monday, June 25, 12

Slide 6

Slide 6 text

Cross Platform • The more the better • Code once, look good everywhere Monday, June 25, 12

Slide 7

Slide 7 text

Cross Platform Monday, June 25, 12

Slide 8

Slide 8 text

Cross Language • C++ • Java • Ruby • Perl • Python Monday, June 25, 12

Slide 9

Slide 9 text

Good UI Designer Monday, June 25, 12

Slide 10

Slide 10 text

Choose Qt • Cross Platform • Cross Languages • Awesome Tools • Here To Stay Monday, June 25, 12

Slide 11

Slide 11 text

Famous Qt Apps • Skype • Google Earth • KDE • KOffice • VLC • PhantomJS Monday, June 25, 12

Slide 12

Slide 12 text

QtRuby In Action • Installation • UI Design • Add Actions • Use Stock Dialogs • Code: http://github.com/ynonp/ ruby-underground-talk Monday, June 25, 12

Slide 13

Slide 13 text

Installation: Windows gem install qtbindings Monday, June 25, 12

Slide 14

Slide 14 text

Installation: Mac/Linux • Install Qt SDK from Nokia • gem install qtbindings • Details: https://github.com/ryanmelt/ qtbindings Monday, June 25, 12

Slide 15

Slide 15 text

Hello QtRuby 1 require 'Qt' 2 3 app = Qt::Application.new ( ARGV ) 4 5 b = Qt::PushButton.new( "DIE ALL HUMANS" ) 6 b.connect ( SIGNAL :clicked ) { app.exit } 7 8 b.show 9 app.exec 10 Monday, June 25, 12

Slide 16

Slide 16 text

Signals & Slots • Signals are Semantic Events • Slots are handlers (methods or blocks) • signal -----> slot Monday, June 25, 12

Slide 17

Slide 17 text

Object Trees • Each Qt::Widget may contain other widgets • Pass a container (parent) to initialize • Use layouts to determine ordering Monday, June 25, 12

Slide 18

Slide 18 text

No Layout 1 require 'Qt' 2 3 app = Qt::Application.new ( ARGV ) 4 5 w = Qt::Widget.new 6 b = Qt::PushButton.new( "Ouch! That hurt" , w) 7 c = Qt::PushButton.new("9", w) 8 9 w.show 10 11 app.exec 12 Monday, June 25, 12

Slide 19

Slide 19 text

With Layout 1 require 'Qt' 2 3 app = Qt::Application.new ( ARGV ) 4 5 w = Qt::Widget.new 6 7 b = Qt::PushButton.new( "Ouch! That hurt") 8 c = Qt::PushButton.new("9") 9 10 l = Qt::VBoxLayout.new( w ) 11 l.addWidget ( b ) 12 l.addWidget ( c ) 13 14 w.show 15 16 app.exec 17 Monday, June 25, 12

Slide 20

Slide 20 text

Monday, June 25, 12

Slide 21

Slide 21 text

UI Design • Run Qt Designer • Make GUI • Save as .ui file • Convert to ruby with: rbuic4 file.ui -x -o file_ui.rb Monday, June 25, 12

Slide 22

Slide 22 text

Nested Layouts Combine different layout managers to make the layout on the right Monday, June 25, 12

Slide 23

Slide 23 text

Add Actions • Connect actions with • obj.connect ( SIGNAL :sig ) { action } Monday, June 25, 12

Slide 24

Slide 24 text

Use Stock Dialogs • Qt::MessageBox.about • Qt::FileDialog.get_open_file_name • Qt::FileDialog.get_save_file_name Monday, June 25, 12

Slide 25

Slide 25 text

QtRuby First App • Rapid UI with Designer • Easy layouts with Qt’s Layout Managers • Extensive library of Widgets and Stock Dialogs Monday, June 25, 12

Slide 26

Slide 26 text

Add Some Color • Use css-like style sheets to style your app • Syntax: http://qt-project.org/ doc/qt-4.8/stylesheet- syntax.html Monday, June 25, 12

Slide 27

Slide 27 text

Happy Coding ! • Ynon Perek • http://qtcollege.co.il • [email protected] Monday, June 25, 12