Archive:Development/Tutorials/Qt4 Ruby Tutorial/Chapter 04 (zh TW): Difference between revisions
No edit summary |
m (AnneW moved page Development/Tutorials/Qt4 Ruby Tutorial/Chapter 04 (zh TW) to Archive:Development/Tutorials/Qt4 Ruby Tutorial/Chapter 04 (zh TW) without leaving a redirect: Obsolete) |
||
(2 intermediate revisions by one other user not shown) | |||
Line 19: | Line 19: | ||
這個範例展示如何建立自己的 widget,並說明如何控制 widget 的最小和最大尺寸。 | 這個範例展示如何建立自己的 widget,並說明如何控制 widget 的最小和最大尺寸。 | ||
< | <syntaxhighlight lang="ruby"> | ||
require 'Qt4' | require 'Qt4' | ||
Line 41: | Line 41: | ||
app.exec() | app.exec() | ||
</ | </syntaxhighlight> | ||
===一行一行的瀏覽 === | ===一行一行的瀏覽 === | ||
< | <syntaxhighlight lang="ruby"> | ||
class MyWidget < Qt::Widget | class MyWidget < Qt::Widget | ||
</ | </syntaxhighlight> | ||
在這裡,我們建立一個新的類別。因為這個類別繼承自 [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget],所以新的類別是一個 widget,並且可以是一個最上層視窗或子 widget(就像前面章節的 [http://doc.qt.nokia.com/latest/qpushbutton.html Qt::PushButton])。 | 在這裡,我們建立一個新的類別。因為這個類別繼承自 [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget],所以新的類別是一個 widget,並且可以是一個最上層視窗或子 widget(就像前面章節的 [http://doc.qt.nokia.com/latest/qpushbutton.html Qt::PushButton])。 | ||
< | <syntaxhighlight lang="ruby"> | ||
def initialize(parent = nil) | def initialize(parent = nil) | ||
super | super | ||
</ | </syntaxhighlight> | ||
這個類別只有一個成員,建構子(除了繼承自 [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget] 的成員)。這個建構子(constructor)是一個標準的 Qt widget 建構子,當您建立 widget 時,你應該包含一個類似的建構子。 | 這個類別只有一個成員,建構子(除了繼承自 [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget] 的成員)。這個建構子(constructor)是一個標準的 Qt widget 建構子,當您建立 widget 時,你應該包含一個類似的建構子。 | ||
Line 61: | Line 61: | ||
就像大多數的 widget,它只是傳遞 '''<tt>parent</tt>''' 參數到 [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget] 建構子。(如果你是 Ruby 的新手,不帶任何參數呼叫 '''<tt>super</tt>''' 將自動傳遞任何目前方法接收的參數,到父類別的相同名稱方法。''更新'':顯然,不使用括號也是很重要,'''<tt>super()</tt>''' 將呼叫父類別的相同名稱方法與一個空參數列表。) | 就像大多數的 widget,它只是傳遞 '''<tt>parent</tt>''' 參數到 [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget] 建構子。(如果你是 Ruby 的新手,不帶任何參數呼叫 '''<tt>super</tt>''' 將自動傳遞任何目前方法接收的參數,到父類別的相同名稱方法。''更新'':顯然,不使用括號也是很重要,'''<tt>super()</tt>''' 將呼叫父類別的相同名稱方法與一個空參數列表。) | ||
< | <syntaxhighlight lang="ruby"> | ||
setFixedSize(200, 120) | setFixedSize(200, 120) | ||
</ | </syntaxhighlight> | ||
因為這個 widget 不知道如何處理大小改變,我們要固定它的大小。在下一章中,我們將展示一個可以回應使用者的大小改變事件的 widget。 | 因為這個 widget 不知道如何處理大小改變,我們要固定它的大小。在下一章中,我們將展示一個可以回應使用者的大小改變事件的 widget。 | ||
< | <syntaxhighlight lang="ruby"> | ||
quit = Qt::PushButton.new(tr('Quit'), self) | quit = Qt::PushButton.new(tr('Quit'), self) | ||
quit.setGeometry(62, 40, 75, 30) | quit.setGeometry(62, 40, 75, 30) | ||
quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold)) | quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold)) | ||
</ | </syntaxhighlight> | ||
在這裡,我們建立並設定這個 widget 的子 widget (新 widget 的父 widget 是 '''<tt>self</tt>''',即 '''<tt>MyWidget</tt>'''實例)。 | 在這裡,我們建立並設定這個 widget 的子 widget (新 widget 的父 widget 是 '''<tt>self</tt>''',即 '''<tt>MyWidget</tt>'''實例)。 | ||
Line 79: | Line 79: | ||
[http://doc.qt.nokia.com/latest/qwidget.html#geometry-prop Qt::Widget::setGeometry()] 呼叫設定兩個 widget 的螢幕位置和大小。這等同於呼叫 [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()]。 | [http://doc.qt.nokia.com/latest/qwidget.html#geometry-prop Qt::Widget::setGeometry()] 呼叫設定兩個 widget 的螢幕位置和大小。這等同於呼叫 [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"> | ||
connect(quit, SIGNAL('clicked()'), $qApp, SLOT('quit()')) | connect(quit, SIGNAL('clicked()'), $qApp, SLOT('quit()')) | ||
</ | </syntaxhighlight> | ||
'''<tt>$qApp</tt>''' 指標是一個在 '''<tt>require 'Qt'</tt>''' 時,建立的全域(global)變數。它指向應用程式唯一的 [http://doc.qt.nokia.com/latest/qapplication.html Qt::Application] 實例。 | '''<tt>$qApp</tt>''' 指標是一個在 '''<tt>require 'Qt'</tt>''' 時,建立的全域(global)變數。它指向應用程式唯一的 [http://doc.qt.nokia.com/latest/qapplication.html Qt::Application] 實例。 | ||
< | <syntaxhighlight lang="ruby"> | ||
app = Qt::Application.new(ARGV) | app = Qt::Application.new(ARGV) | ||
Line 92: | Line 92: | ||
app.exec() | app.exec() | ||
</ | </syntaxhighlight> | ||
在這裡,我們實例化的新的子 widget、設定為主 widget,以及執行應用程式。 | 在這裡,我們實例化的新的子 widget、設定為主 widget,以及執行應用程式。 |
Latest revision as of 15:37, 23 June 2013
Template:I18n/Language Navigation Bar (zh TW)
Template:TutorialBrowser (zh TW)
Let There Be Widgets
檔案:
概覽
這個範例展示如何建立自己的 widget,並說明如何控制 widget 的最小和最大尺寸。
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,所以新的類別是一個 widget,並且可以是一個最上層視窗或子 widget(就像前面章節的 Qt::PushButton)。
def initialize(parent = nil)
super
這個類別只有一個成員,建構子(除了繼承自 Qt::Widget 的成員)。這個建構子(constructor)是一個標準的 Qt widget 建構子,當您建立 widget 時,你應該包含一個類似的建構子。
這個參數是它的父 widget。為了建立一個最上層視窗,您要指定父 widget 為 nil 。正如你所看到的,這個 widget 預設為是一個最上層視窗。
就像大多數的 widget,它只是傳遞 parent 參數到 Qt::Widget 建構子。(如果你是 Ruby 的新手,不帶任何參數呼叫 super 將自動傳遞任何目前方法接收的參數,到父類別的相同名稱方法。更新:顯然,不使用括號也是很重要,super() 將呼叫父類別的相同名稱方法與一個空參數列表。)
setFixedSize(200, 120)
因為這個 widget 不知道如何處理大小改變,我們要固定它的大小。在下一章中,我們將展示一個可以回應使用者的大小改變事件的 widget。
quit = Qt::PushButton.new(tr('Quit'), self)
quit.setGeometry(62, 40, 75, 30)
quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))
在這裡,我們建立並設定這個 widget 的子 widget (新 widget 的父 widget 是 self,即 MyWidget實例)。
QObject::tr() 函式呼叫圍住的 'Quit' 字串,標記該字串是可以翻譯的。從而在執行期(run-time)時,根據翻譯檔案的內容改變它。在決定以後要把您的應用程式翻譯成其它語言的情況下,使用 QObject::tr() 圍住所有使用者可見的字串是一個好習慣。
Qt::Widget::setGeometry() 呼叫設定兩個 widget 的螢幕位置和大小。這等同於呼叫 Qt::Widget::move() 跟者用 Qt::Widget::resize()。
connect(quit, SIGNAL('clicked()'), $qApp, SLOT('quit()'))
$qApp 指標是一個在 require 'Qt' 時,建立的全域(global)變數。它指向應用程式唯一的 Qt::Application 實例。
app = Qt::Application.new(ARGV)
widget = MyWidget.new()
widget.show()
app.exec()
在這裡,我們實例化的新的子 widget、設定為主 widget,以及執行應用程式。
執行應用程式
這支程式的行為非常類似前一章的。不同之處在於我們如何實作它。但是,它的表現還是略有不同。只要嘗試調整大小就會發現。
練習
嘗試建立另一個 MyWidget 物件。會發生什麼事?
嘗試加入更多的按鈕或把 Qt::PushButton 以外的東西放入 widget。