Ruby/Desktop(Qt4): различия между версиями

Содержимое удалено Содержимое добавлено
Строка 1:
=== Пример "«простого текстового редактора"», написанного на Ruby + Qt4. ===
 
Сейчас мы напишем простой текстовый редактор (просмотрщик для начала).
 
Нам понадобится ruby1.8 и rbuic4 в системе GNU/Linux. ПричемПричём при установке последнего должны будут установиться необходимые библиотеки по работе с Qt4 в rubyRuby.
Интерфейс будет делаться в Qt Designer (designer-qt4)
 
В Qt Designer создаемсоздаём новую форму, основанную на "«Main Window"».
 
На форму помещаем 2 кнопки типа "«Push Button"» и поле для редактирования текста - "«Text Edit"».
В Qt Designer создаем новую форму, основанную на "Main Window".
На форму помещаем 2 кнопки типа "Push Button" и поле для редактирования текста - "Text Edit"
Для первой кнопки установим текст - "«Открыть файл"»: через свойство "«text"» в окне Property Editor или по двойному кликущелчку на кнопке.
Так жеТакже установим для неё ObjectName - "«b_open"»: опять же через Property Editor или выбрав в контекстном меню выбравпункт «Change objectName».
 
Для главной формы objectName я установил как - "«notepad"», а для Text Edit как "«editor_window"».
 
ДляВторой второй кнопкикнопке установим название "закрыть"«Закрыть» и objectName -= "«b_close"». Кнопка что должна делать? Правильно, закрывать окно. В Qt-Disigner'a в окне Signal/Slot Editor добавим новый слот:
Sender -> b_close
Signal -> clicked()
Строка 21 ⟶ 20 :
Slot -> close()
 
И сохраняем проект как «editor.ui».
 
Теперь выполним команду:
Строка 31 ⟶ 30 :
опции -Ku предназначены для коррекной обработки UTF-8.
 
Но тут есть одна тонкость -: если мы будем вносить какие-то изменения в интерфейс, -то будет переписываться файл «editor.rb». Поэтому мы создадим отдельный скрипт, который будет вызывать форму, назовемназовём его «start.rb».
ПерегенерируемПересоздадим форму: rbuic4 editor.ui > editor.rb, и напишем start.rb следующим образом:
 
<source lang="ruby">
Строка 54 ⟶ 53 :
</source>
 
Сейчас кнопка "закрыть" -«Закрыть» работает. Пора настроить кнопку "открыть"«Открыть».
ВнесемВнесём изменения в «start.rb»:
 
Сейчас кнопка "закрыть" - работает. Пора настроить кнопку "открыть".
Внесем изменения в start.rb
<source lang="ruby">require 'Qt4'
require 'editor.rb'
Строка 72 ⟶ 71 :
end
 
#метод, который выполняетвыполняется при нажатии на кнопку.
def file_dialog
@ui.editor_window.setText 'wikibooksWikiBooks: Ruby'
end
end
Строка 85 ⟶ 84 :
end
</source>
Если запустить приложение, -то при нажатии на кнопку ('«clicked()'») вызывается слот '«file_dialog()',» и, в свою очередь, вызывается метод «file_dialog», который вставляет текст 'wikibooks«WikiBooks: Ruby'» в EditText.
 
Сейчас мы используем Qt::FileDialog для выбора файла. Следующий код:
Строка 118 ⟶ 117 :
</source>
 
f.getOpenFileName покажет диалог выбора файла, который закрывается после выбора файла (и возвращается путь к файлу), прерывая выполнениявыполнение кода. Это работает, но если мы нажмемнажмём "отмена"«Отмена» при работе окна f.getOpenFileName, мы не получим пути к файлу, но получим следущуюследующую ошибку:
start.rb:17:in `initialize': can't convert nil into String (TypeError)
 
Т.е.То есть, если файл не выбран - возвращается nil. Следующий код включает проверку возвращаемого значения:
<source lang="ruby">
require 'Qt4'
Строка 155 ⟶ 154 :
</source>
 
Сейчас мы можем выбрать файл, но не можем сохранить его. Давайте добавимДобавим кнопку "сохранить"«Сохранить» в QTDesign'eи установим иеё назначемсвойство objectName -в '«b_save'», и перегенерируемпересоздадим GUI из нового ui-файла:
<code>rbuic4 editor.ui > editor.rb</code>
 
Сейчас приложение выглядит следующим образом:
 
Мы добавим слот для сохранения файла и создадим коннект ему коннект с сигналом "«clicked()"» на pushButton-кнопку "сохранить«Сохранить»:
<source lang="ruby">
require 'Qt4'
Строка 202 ⟶ 201 :
</source>
 
И такИтак, мы получили приложение, которое открывает текстовые файлы и сохраняет изменения в этом файле.
[[Категория:Ruby|Desktop(Qt4)]]