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