所以我对ruby qt是100%新手,我已经习惯了python,而且我得到了基础知识,但因为QMenuBar不能正确地与Qt :: Widget对齐,我一直试图弄清楚QMainWindow命令。我知道它就像1000%简单你告诉我的第二个。但是.setCentralWidget命令似乎不适用于ruby所以我只是输了......
这是我的“测试”代码,如果你得到的问题,你真的不需要这个,但如果我不提出它,有一个会像你的crdee的wherreee!我不明白吗?
require 'Qt'
class Window < Qt::Widget
slots 'slotAbout()', 'slotExit()', 'slotNew()'
def initialize(parent = nil)
super(parent)
#menubar part
@menubar = Qt::MenuBar.new(self)
@menubar.setObjectName('menubar')
@menuFile = Qt::Menu.new(@menubar)
@menuFile.setObjectName('menuFile')
@menuFile.setTitle('File')
@menuHelp = Qt::Menu.new(@menubar)
@menuHelp.setObjectName('menuHelp')
@menuHelp.setTitle('&Help')
@actionNew = Qt::Action.new(self)
@actionNew.setObjectName('actionNew')
@actionNew.setText('New')
@actionExit = Qt::Action.new(self)
@actionExit.setObjectName('actionExit')
@actionExit.setText('Exit')
@actionAbout = Qt::Action.new(self)
@actionAbout.setObjectName('actionAbout')
@actionAbout.setText('About')
@menubar.addAction(@menuFile.menuAction())
@menubar.addAction(@menuHelp.menuAction())
@menuFile.addAction(@actionNew)
@menuFile.addAction(@actionExit)
@menuHelp.addAction(@actionAbout)
@text = Qt::LineEdit.new
@textbox.setStyleSheet "QWidget { color : #f52c01 }"
@textbox.setStyleSheet "QWidget { color : #009600 }"
@text.setStyleSheet "QWidget { color : black }"
@text.setText(tr("Somthing"))
connect(@actionExit, SIGNAL('triggered()'), self, SLOT('slotExit()'))
connect(@actionNew, SIGNAL('triggered()'), self, SLOT('slotNew()'))
connect(@actionAbout, SIGNAL('triggered()'), self, SLOT('slotAbout()'))
#causes some bugs
# statusbar = Qt::StatusBar.new(self)
# statusbar.setObjectName('statusbar')
#examples of groups
oneGroup = Qt::GroupBox.new(tr("GroupOne"))
oneLabel = Qt::Label.new(tr("One"))
twoGroup = Qt::GroupBox.new(tr("GroupTwo"))
twoLabel = Qt::Label.new(tr("One, I mean two!"))
twoslider = Qt::Slider.new(Qt::Horizontal)
twoslider.setRange(0, 5)
twoslider.setValue(0)
#connecting objects to slots
# connect(onething, SIGNAL('thing(int)'), self, SLOT('slotAbout( int )'))
#layout set up using groups
oneLayout = Qt::GridLayout.new
oneLayout.addWidget(oneLabel, 0, 0)
oneLayout.addWidget(@text, 1, 0)
oneGroup.layout = oneLayout
twoLayout = Qt::GridLayout.new
twoLayout.addWidget(twoLabel, 0, 0)
twoLayout.addWidget(twoslider, 1, 0)
twoGroup.layout = twoLayout
layout = Qt::VBoxLayout.new
layout.addWidget(@menubar)
layout.addWidget(oneGroup)
layout.addWidget(twoGroup)
setLayout(layout)
setWindowTitle(tr("Main Title"))
end
def slotExit()
app.exec
end
def slotAbout()
Qt::MessageBox.about(self, tr("About Recent Files"), tr("Weeeaaalllll thar theaes fear-es that make thes that which happen, well just karda happen."))
end
def slotNew()
other = Window.new
other.show()
end
end
app = Qt::Application.new(ARGV)
window = Window.new
window.show
app.exec
答案 0 :(得分:2)
找到一个很棒的模板,希望这可以帮助任何讨厌ruby文档的新手。
require 'Qt4'
class Ui_MainWindow
def setupUi(mainWindow)
mainWindow.setObjectName("mainWindow")
@font = Qt::Font.new
@font.setPointSize(14)
mainWindow.setFont(@font)
@centralwidget = Qt::Widget.new(mainWindow)
@centralwidget.setObjectName("centralwidget")
@qgridLayout = Qt::GridLayout.new(@centralwidget)
@qgridLayout.setObjectName("qgridLayout")
@label = Qt::Label.new(@centralwidget)
@label.setObjectName("label")
@label.setAlignment(Qt::AlignCenter)
@qgridLayout.addWidget(@label, 0, 0, 1, 1)
mainWindow.setCentralWidget(@centralwidget)
@menubar = Qt::MenuBar.new(mainWindow)
@menubar.setObjectName("menubar")
@menubar.setGeometry(Qt::Rect.new(0, 0, 517, 35))
mainWindow.setMenuBar(@menubar)
@statusbar = Qt::StatusBar.new(mainWindow)
@statusbar.setObjectName("statusbar")
mainWindow.setStatusBar(@statusbar)
@dockWidget = Qt::DockWidget.new(mainWindow)
@dockWidget.setObjectName("dockWidget")
@dockWidget.setAutoFillBackground(false)
@dockWidget.setAllowedAreas(Qt::TopDockWidgetArea)
@dockWidgetContents = Qt::Widget.new(@dockWidget)
@dockWidgetContents.setObjectName("dockWidgetContents")
@qgridLayout1 = Qt::GridLayout.new(@dockWidgetContents)
@qgridLayout1.setObjectName("qgridLayout1")
@label_2 = Qt::Label.new(@dockWidgetContents)
@label_2.setObjectName("label_2")
@label_2.setAlignment(Qt::AlignCenter)
@qgridLayout1.addWidget(@label_2, 0, 0, 1, 1)
@dockWidget.setWidget(@dockWidgetContents)
mainWindow.addDockWidget(4, @dockWidget)
@dockWidget_2 = Qt::DockWidget.new(mainWindow)
@dockWidget_2.setObjectName("dockWidget_2")
@dockWidget_2.setAllowedAreas(Qt::LeftDockWidgetArea)
@dockWidgetContents_2 = Qt::Widget.new(@dockWidget_2)
@dockWidgetContents_2.setObjectName("dockWidgetContents_2")
@qgridLayout2 = Qt::GridLayout.new(@dockWidgetContents_2)
@qgridLayout2.setObjectName("qgridLayout2")
@label_3 = Qt::Label.new(@dockWidgetContents_2)
@label_3.setObjectName("label_3")
@label_3.setAlignment(Qt::AlignCenter)
@qgridLayout2.addWidget(@label_3, 0, 0, 1, 1)
@dockWidget_2.setWidget(@dockWidgetContents_2)
mainWindow.addDockWidget(1, @dockWidget_2)
@dockWidget_3 = Qt::DockWidget.new(mainWindow)
@dockWidget_3.setObjectName("dockWidget_3")
@dockWidget_3.setAllowedAreas(Qt::RightDockWidgetArea)
@dockWidgetContents_3 = Qt::Widget.new(@dockWidget_3)
@dockWidgetContents_3.setObjectName("dockWidgetContents_3")
@qgridLayout3 = Qt::GridLayout.new(@dockWidgetContents_3)
@qgridLayout3.setObjectName("qgridLayout3")
@label_4 = Qt::Label.new(@dockWidgetContents_3)
@label_4.setObjectName("label_4")
@label_4.setAlignment(Qt::AlignCenter)
@qgridLayout3.addWidget(@label_4, 0, 0, 1, 1)
@dockWidget_3.setWidget(@dockWidgetContents_3)
mainWindow.addDockWidget(2, @dockWidget_3)
@dockWidget_4 = Qt::DockWidget.new(mainWindow)
@dockWidget_4.setObjectName("dockWidget_4")
@dockWidget_4.setAllowedAreas(Qt::BottomDockWidgetArea)
@dockWidgetContents_4 = Qt::Widget.new(@dockWidget_4)
@dockWidgetContents_4.setObjectName("dockWidgetContents_4")
@qgridLayout4 = Qt::GridLayout.new(@dockWidgetContents_4)
@qgridLayout4.setObjectName("qgridLayout4")
@label_5 = Qt::Label.new(@dockWidgetContents_4)
@label_5.setObjectName("label_5")
@label_5.setAlignment(Qt::AlignCenter)
@qgridLayout4.addWidget(@label_5, 0, 0, 1, 1)
@dockWidget_4.setWidget(@dockWidgetContents_4)
mainWindow.addDockWidget(8, @dockWidget_4)
retranslateUi(mainWindow);
size = Qt::Size.new(517, 391)
size = size.expandedTo(mainWindow.minimumSizeHint())
mainWindow.resize(size)
Qt::MetaObject.connectSlotsByName(mainWindow)
end
# setupUi
def retranslateUi(mainWindow)
mainWindow.setWindowTitle(Qt::Application.translate("MainWindow", "Example 2", nil, Qt::Application::UnicodeUTF8))
@label.setText(Qt::Application.translate("MainWindow", "Central Widget", nil, Qt::Application::UnicodeUTF8))
@label_2.setText(Qt::Application.translate("MainWindow", "Top Docking Area", nil, Qt::Application::UnicodeUTF8))
@label_3.setText(Qt::Application.translate("MainWindow", "Left Docking Area", nil, Qt::Application::UnicodeUTF8))
@label_4.setText(Qt::Application.translate("MainWindow", "Right Docking Area", nil, Qt::Application::UnicodeUTF8))
@label_5.setText(Qt::Application.translate("MainWindow", "Bottom Docking Area", nil, Qt::Application::UnicodeUTF8))
end
# retranslateUi
end
module Ui
class MainWindow < Ui_MainWindow
end
end
# module Ui
if $0 == __FILE__
a = Qt::Application.new(ARGV)
u = Ui_MainWindow.new
w = Qt::MainWindow.new
u.setupUi(w)
w.show
a.exec
end
答案 1 :(得分:0)
所以与setCentralWidget有点混淆的是你需要传递一个Qt :: Widget并将它传递给Qt :: Layout会给你一个NoMethodError。我认为这似乎有点反直觉,因为大多数人都希望为他们的第一个基本GUI设置网格,hbox或vbox布局。
将小部件设置为中央小部件后,您可以调用
yourCentralWidget.layout = yourNewLayout
并设置您想要的任何布局作为主窗口。我希望有所帮助!