设置Qt :: MainWindow

时间:2013-03-06 15:52:28

标签: ruby user-interface qt4 qtruby

所以我对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

2 个答案:

答案 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

并设置您想要的任何布局作为主窗口。我希望有所帮助!