class Viewer < Qt::Widget slots 'setDefault()', 'setSansSerif()', 'setItalics()' def initialize super setFontSubstitutions codec = Qt::TextCodec::codecForName("utf8") # Shouldn't 'pack("U*")' for UTF-8 work here? - Richard # The 'U' option packs each element into two bytes and doesn't work # The 'c' option packs them into a single byte and does work greeting_heb = codec.toUnicode([0327, 0251, 0327, 0234, 0327, 0225, 0327, 0235].pack("C*")) greeting_ru = codec.toUnicode([0320, 0227, 0320, 0264, 0321, 0200, 0320, 0260, 0320, 0262, 0321, 0201, 0321, 0202, 0320, 0262, 0321, 0203, 0320, 0271, 0321, 0202, 0320, 0265].pack("C*")) greeting_en = 'Hello' @greetings = Qt::TextView.new(self, 'textview') @greetings.setText( greeting_en + "\n" + greeting_ru + "\n" + greeting_heb) @fontInfo = Qt::TextView.new(self, 'fontinfo') setDefault @defaultButton = Qt::PushButton.new('Default', self, 'pushbutton1') @defaultButton.setFont(Qt::Font.new('times')) connect(@defaultButton, SIGNAL('clicked()'), self, SLOT('setDefault()')) @sansSerifButton = Qt::PushButton.new('Sans Serif', self, 'pushbutton2') @sansSerifButton.setFont(Qt::Font.new('Helvetica', 12)) connect(@sansSerifButton, SIGNAL('clicked()'), self, SLOT('setSansSerif()')) @italicsButton = Qt::PushButton.new('Italics', self, 'pushbutton1') @italicsButton.setFont(Qt::Font.new('lucida', 12, Qt::Font.Bold, true)) connect(@italicsButton, SIGNAL('clicked()'), self, SLOT('setItalics()')) layout end def setDefault font = Qt::Font.new('Bavaria') font.setPointSize(24) font.setWeight(Qt::Font.Bold) font.setUnderline(true) @greetings.setFont(font) showFontInfo(font) end def setSansSerif font = Qt::Font.new('Newyork', 18) font.setStyleHint(Qt::Font.SansSerif) @greetings.setFont(font) showFontInfo(font) end def setItalics font = Qt::Font.new('Tokyo') font.setPointSize(32) font.setWeight(Qt::Font.Bold) font.setItalic(true) @greetings.setFont(font) showFontInfo(font) end def setFontSubstitutions substitutes = Array.new substitutes.push('Times') substitutes.push('Mincho') substitutes.push('Arabic Newspaper') substitutes.push('crox') Qt::Font.insertSubstitutions('Bavaria', substitutes) Qt::Font.insertSubstitution('Tokyo', 'Lucida') end def layout textViewContainer = Qt::HBoxLayout.new textViewContainer.addWidget(@greetings) textViewContainer.addWidget(@fontInfo) buttonContainer = Qt::HBoxLayout.new buttonContainer.addWidget(@defaultButton) buttonContainer.addWidget(@sansSerifButton) buttonContainer.addWidget(@italicsButton) maxButtonHeight = @defaultButton.height if (@sansSerifButton.height > maxButtonHeight) maxButtonHeight = @sansSerifButton.height end if (@italicsButton.height > maxButtonHeight) maxButtonHeight = @italicsButton.height end @defaultButton.setFixedHeight(maxButtonHeight) @sansSerifButton.setFixedHeight(maxButtonHeight) @italicsButton.setFixedHeight(maxButtonHeight) container = Qt::VBoxLayout.new(self) container.addLayout(textViewContainer) container.addLayout(buttonContainer) resize(700, 250) end def showFontInfo (font) info = Qt::FontInfo.new(font) messageText = 'Font requested: "' + font.family + '" ' + font.pointSize.to_s + 'pt
' + 'Font used: "' + info.family.to_s + '" ' + info.pointSize.to_s + 'pt

' substitutions = Qt::Font.substitutes(font.family) unless substitutions.size == 0 messageText = messageText + 'The following substitutions exist for ' + font.family + ':

' else messageText = messageText + 'No substitutions exist for ' + font.family + '.' end @fontInfo.setText(messageText) end end