Development/Tutorials/Qt4 Ruby Tutorial/Chapter 04/ru: Difference between revisions
Aspotashev (talk | contribs) (Created page with "Метод [http://doc.qt.nokia.com/latest/qobject.html#tr QObject::tr()], вызванный для строки 'Quit', помечает её как переводимую, ч...") |
Aspotashev (talk | contribs) (Created page with "Вызов [http://doc.qt.nokia.com/latest/qwidget.html#geometry-prop Qt::Widget::setGeometry()] устанавливает и положение виджета на экране...") |
||
Line 77: | Line 77: | ||
Метод [http://doc.qt.nokia.com/latest/qobject.html#tr QObject::tr()], вызванный для строки 'Quit', помечает её как переводимую, что позволяет менять её в процессе выполнения программы исходя из файла перевода. Хорошей привычкой является вызов [http://doc.qt.nokia.com/latest/qobject.html#tr QObject::tr()] для всех строк, видимых пользователем, на случай, если вы захотите перевести своё приложение на различные языки. | Метод [http://doc.qt.nokia.com/latest/qobject.html#tr QObject::tr()], вызванный для строки 'Quit', помечает её как переводимую, что позволяет менять её в процессе выполнения программы исходя из файла перевода. Хорошей привычкой является вызов [http://doc.qt.nokia.com/latest/qobject.html#tr QObject::tr()] для всех строк, видимых пользователем, на случай, если вы захотите перевести своё приложение на различные языки. | ||
Вызов [http://doc.qt.nokia.com/latest/qwidget.html#geometry-prop Qt::Widget::setGeometry()] устанавливает и положение виджета на экране, и его размер. Это эквивалентно паре вызовов [http://doc.qt.nokia.com/latest/qwidget.html#pos-prop Qt::Widget::move()] и [http://doc.qt.nokia.com/latest/qwidget.html#size-prop Qt::Widget::resize()]. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> |
Revision as of 17:20, 2 July 2011
Development/Tutorials/Qt4 Ruby Tutorial/Chapter 04
Languages: عربي | Asturianu | Català | Česky | Kaszëbsczi | Dansk | Deutsch | English | Esperanto | Español | Eesti | فارسی | Suomi | Français | Galego | Italiano | 日本語 | 한국어 | Norwegian | Polski | Português Brasileiro | Română | Русский | Svenska | Slovenčina | Slovenščina | српски | Türkçe | Tiếng Việt | Українська | 简体中文 | 繁體中文
Серия примеров | Введение в программирование на Qt®4 на языке Ruby |
Необходимо знать | Пример 3: Иерархия виджетов |
Следующий пример | Пример 5: «Кубики» |
Литература | нет |
Давайте создадим свой виджет
![](/images.techbase/4/4b/Qt4_Ruby_Tutorial_Screenshot_4.png)
Файлы:
Обзор
Этот пример показывает, как можно создать свой собственный виджет. Также здесь рассказывается, как настроить максимальные и минимальные размеры виджета.
require 'Qt4'
class MyWidget < Qt::Widget
def initialize(parent = nil)
super
setFixedSize(200, 120)
quit = Qt::PushButton.new(tr('Quit'), self)
quit.setGeometry(62, 40, 75, 30)
quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))
connect(quit, SIGNAL('clicked()'), $qApp, SLOT('quit()'))
end
end
app = Qt::Application.new(ARGV)
widget = MyWidget.new()
widget.show()
app.exec()
Построчный обзор программы
class MyWidget < Qt::Widget
Здесь мы создаём новый класс. Поскольку этот класс наследуется от класса Qt::Widget, новый класс является виджетом и может быть либо окном, либо дочерним виджетом (как Qt::PushButton в предыдущей главе).
def initialize(parent = nil)
super
Этот класс имеет всего лишь один член, а именно, конструктор (не считая членов класса, наследованных от класса Qt::Widget). При создании своих виджетов всегда нужно добавлять в класс аналогичный конструктор.
Аргумент конструктора — это родительский виджет. Чтобы создать окно, нужно в качестве аргумента parent передать nil. Нетрудно видеть, что по умолчанию виджет становится окном (если не указать аргумент parent).
Как и большинство виджетов, наш виджет просто передаёт аргумент parent в конструктор класса Qt::Widget. (Если вы не очень знакомы с Ruby: вызов super без аргументов автоматически передаёт все полученные в конструкторе аргументы в конструктор базового класса. Важно, что super написан без скобок: super() вызовет конструктор базового класса без аргументов.)
setFixedSize(200, 120)
Поскольку виджет не знает, что делать при изменении размеров, мы фиксируем его размер. В следующей главе мы покажем, как виджет может реагировать на изменение размеров пользователем.
quit = Qt::PushButton.new(tr('Quit'), self)
quit.setGeometry(62, 40, 75, 30)
quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))
Здесь мы создаём и настраиваем дочерний виджет нашего виджета (родительским виджетом нового виджета становится self, т.е. объект класса MyWidget).
Метод QObject::tr(), вызванный для строки 'Quit', помечает её как переводимую, что позволяет менять её в процессе выполнения программы исходя из файла перевода. Хорошей привычкой является вызов QObject::tr() для всех строк, видимых пользователем, на случай, если вы захотите перевести своё приложение на различные языки.
Вызов Qt::Widget::setGeometry() устанавливает и положение виджета на экране, и его размер. Это эквивалентно паре вызовов Qt::Widget::move() и Qt::Widget::resize().
connect(quit, SIGNAL('clicked()'), $qApp, SLOT('quit()'))
The $qApp pointer is a global variable created when you require 'Qt'. It points to the application's unique Qt::Application instance.
app = Qt::Application.new(ARGV)
widget = MyWidget.new()
widget.show()
app.exec()
Here we instantiate our new child, set it to be the main widget, and execute the application.
Running the Application
This program is very similar in behavior to the previous one. The difference lies in the way we have implemented it. It does behave slightly differently, however. Just try to resize it to see.
Exercises
Try to create another MyWidget object. What happens?
Try to add more buttons or put in widgets other than Qt::PushButton.