第5讲 Qt窗口部件
- 格式:ppt
- 大小:1.31 MB
- 文档页数:51
Qt基本控件-QWidget详解原⽂转载于:QWidget 类的构造函数如下:QWidget(QWidget *parent = 0, Qt::WindowFlags f = 0);其中参数 parent 指向⽗窗⼝,如果这个参数为 0,则窗⼝就成为⼀个顶级窗⼝参数 f 是构造窗⼝的标志,主要⽤于控制窗⼝的类型和外观等,有以下常⽤值。
1)Qt::FramelessWindowHint:没有边框的窗⼝。
2)Qt::WindowStaysOnTopHint:总是最上⾯的窗⼝。
3)Qt::CustomizeWindowHint:⾃定义窗⼝标题栏,以下标志必须与这个标志⼀起使⽤才有效,否则窗⼝将有默认的标题栏。
4)Qt::WindowTitleHint:显⽰窗⼝标题栏。
5)Qt::WindowSystemMenuHint:显⽰系统菜单。
6)Qt::WindowMinimizeButtonHint:显⽰最⼩化按钮。
7)Qt::WindowMaximizeButtonHint:显⽰最⼤化按钮。
8)Qt::WindowMinMaxbuttonHint:显⽰最⼩化按钮和最⼤化按钮。
9)Qt::WindowCloseButtonHint:显⽰关闭按钮。
独⽴窗⼝窗⼝构造的时候如果有 Qt::Window 标志,那么它就是⼀个独⽴窗⼝,否则就是⼀个依附于其他独⽴窗⼝的窗⼝部件。
顶级窗⼝⼀定是独⽴窗⼝,但独⽴窗⼝不⼀定是顶级的,它可以有⽗窗⼝,当⽗窗⼝被析构时它也会随之被析构。
独⽴窗⼝⼀般有⾃⼰的外边框和标题栏,可以有移动、改变⼤⼩等操作。
⼀个窗⼝是否为独⽴窗⼝可⽤下⾯的成员函数来判断:bool isWindow() const; // 判断是否为独⽴窗⼝下⾯这个函数可以得到窗⼝部件所在的独⽴窗⼝。
QWidget *window() const; // 所得所在的独⽴窗⼝当然,如果窗⼝本⾝就是独⽴窗⼝,那么得到的就是⾃⼰。
Qt5种标准对话框及使⽤⽅法详解(Dialog )引⽤⾃: (侵删);QT 为应⽤程序设计提供了⼀些常⽤的标准对话框,如打开⽂件对话框、选择颜⾊对话框、信息提⽰和确认选择对话框、标准输⼊对话框等,⽤户⽆需再⾃⼰设计这些常⽤的对话框,这样可以减少程序设计⼯作量。
在前⾯⼏章的实例中,或多或少地⽤到了其中的⼀些对话框。
Qt 预定义的各标准对话框的类,及其主要静态函数的功能见表 1(由于输⼊参数⼀般较多,省略了函数的输⼊参数,只列出了函数的返回值类型)。
表 1 Qt 预定义标准对话框对话框常⽤静态函数名称函数功能QFileDialog⽂件对话框QString getOpenFileName() QStringList getOpenFileNames()QString getSaveFileName() QString getExistingDirectory()QUrl getOpenFileUrl()选择打开⼀个⽂件 选择打开多个⽂件 选择保存⼀个⽂件 选择⼀个⼰有的⽬录选择打幵⼀个⽂件,可选择远程⽹络⽂件QcolorDialog 颜⾊对话框QColor getColor()选择颜⾊QFontDialog 字体对话框QFont getFont()选择字体QinputDialog 输⼊对话框QString getText() int getlnt() double getDouble()QString getltem()QString getMultiLineText()输⼊单⾏⽂字 输⼊整数 输⼊浮点数从⼀个下拉列表框中选择输⼊ 输⼊多⾏字符串QMessageBox 消息框StandardButton information() StandardButton question()StandardButton waming() StandardButton critical() void about()void aboutQt()信息提⽰对话框 询问并获取是否确认的对话框 警告信息提⽰对话框 错误信息提⽰对话框 设置⾃定义信息的关于对话框 关于Qt 的对话框实例 samp6_1 演⽰使⽤这些对话框,程序运⾏界⾯如图 2 所⽰。
如何获得Qt窗⼝部件在主窗⼝中的位置⽤Qt Creator 设计程序时,最⽅便的就是ui设计器,可以很容易的得到想要的布局。
但是这样⾃动布局带来的后果是很难知道窗⼝中某⼀部件在主窗⼝中的相对位置。
在处理⼦窗⼝⿏标事件时变的很⿇烦。
主窗⼝有菜单、⼯具条等,想⽤⿏标绘图,
把⿏标轨迹映射到窗⼝部件上,这些问题。
其实最主要的是获得窗⼝部件的起始点相对主窗⼝的位置。
例如:在主窗⼝拖⼊⼀个QScrollArea 在其上放⼀个QLabel⽤来显⽰⿏标事件。
可以在ui对象结构上看到如下结构。
⼤家知道,我们可以⽤pos()来获得某⼀窗⼝部件的起始点相对其⽗的位置。
那么,看结构可知,要获得scrollArea_2在主窗⼝(MainWindow)中的相对位置
即为:ui->scrollArea_2->pos()+ui->centralWidget->pos()
所以想获得窗⼝ScrollArea_2在主窗⼝中的相对位置区域为:
labelrect = QRect(ui->scrollArea_2->pos()+ui->centralWidget->pos(),
ui->scrollArea_2->size());
那么判断⿏标是否在此控件上只需在⿏标事件响应函数内写如下语句即可:
if(labelrect.contains(event->pos())) {……}
现在你可以在任意复杂的ui结构中确定某⼀⼦部件的位置了,但⼀定要注意:
⽗关系,即当前部件于其⽗部件的相对位置,其⽗部件与上层部件的相对位置,
直到与主窗⼝的相对位置。
widget跟随窗口调整
UI界面控件随窗口自适应变化大小
通过Qt Creator的设计模式实现,无需增加代码。
如下图,实现对最下层tableview大小跟随窗口调整:
1、界面空白处右击,选择布局-->栅格布局,这会使centralWidget布局设置为GridLayout。
然后界面中的部件会自动添加到栅格布局中,此时的部件会根据窗口大小自动调整大小。
2、但是部件的大小却不是我们希望的,极不协调,接下来就需要调整每个控件的设置。
调整控件Size的项目包括:sizePolicy、minimumSize、maxmumSize
比如将上面的第三行的lineEdit限制高度:
这样,在调整窗口大小的时候,lineEdit控件只能任意改变宽度,而高度则被限制在30个像素内。
(调整之后效果)
注意:
有些情况下设置了上面的操作步骤之后,但似乎没有起作用。
比如上面例子中第一行的几个空间,虽然设置了sizePolicy以及宽度、高度限制,但是还是随着界面改变。
这个时候,就需要添加 Spacer(看起来像弹簧的控件),之后就能解决问题了。
这是因为GridLayout布局的影响,他必须让布局之内的区域布满控件,而不能有空白,所以即使设置了大小限制,仍然会被拉伸。
添加Spacer就是为了填充多余的区域。
QT5自学教程(6)——布局,Tab和伙伴编辑在这一小节将介绍gui中的布局、tab和伙伴编辑。
和往常一样,我们依旧从介绍一些新的名词的含义开始。
1. Q : 什么是Layout?A:Layout就是所谓的布局。
布局的作用是管理窗口中的部件(比如前面接触过的按键、标签、编辑栏等),使得它们以一种美观合理的方式放置,虽然这不是必须的,但估计没有人会喜欢杂乱无章的窗口界面吧?!2. Q : Tab是什么?A:这里的Tab指的就是你键盘上的Tab键。
在一些窗口中按Tab键可以移动窗口中的焦点,比如从一个按键转移到另一个按键,或者从一个窗口转移到另一个窗口。
3. Q : 什么是buddies编辑?A:这里的buddies编辑指的就是伙伴编辑。
顾名思义,将两个不同部件关联在一起(前提是二者可以关联)之后,它们也就有了一个类似伙伴的关系,把窗口焦点移动到其中一个对象时会自动切换到它的伙伴对象。
例如,在我们下面这个例子中我们把label和line edit编辑为伙伴关系,当我们用把焦点移动到label上时,焦点会自动切换到line edit中。
在了解了布局、T ab和伙伴编辑的概念之后,我们将给出例子。
这个例子中不需要书写代码,所以这里也就不给出代码了(并不是说程序中没有代码,只不过在建立项目的时候,在向导的帮助下代码已经自动生成了)。
1. 建立一个gui项目(这里我们选择的QDialig是为了生成窗口的简洁,QDialog界面没有工具条、菜单和状态栏。
当然,你选择QMainWindow也绝对木有任何问题):2. 在界面中放置label、line edit、2个pushbutton和Horizontal spacer:3 将两个按键名字分别改为OK和Cancel,标签栏改为Name:。
在Edit Widget(编部件辑)模式下利用Lay Out Horizontally(水平布局)和Lay Out Vertically(垂直布局)对窗口中部件进行布局:4. 在Edit Signal\Slot(信号和槽编辑模式)下对两个按键进行编辑:(1)先对OK按键进行编辑(连接信号clicked()和槽accept()),按下OK键时接收内容并关闭窗口:(2)在对Cancel按键进行编辑(连接信号clicked()和槽close()),按下Cancel键时关闭窗口:5. 在Edit buddies(伙伴编辑)模式下,将label和line edit设置为伙伴:6. 在Edit Tab Order(T ab顺序)模式下,编辑按下Tab窗口中焦点的移动顺序(双击其中的数字可以改变其顺序):运行结果:小结在这一节介绍了布局、T ab和伙伴编辑的知识。
【原创】Qt自定义窗口部件QtDesigner自定义窗口部件有两种方法:改进法(promotion)和插件法(plugin)改进法1、改进法之前,要先写好子类化QSpinBox后的HexspinBox.h和HexspinBox.cpp文件。
把这两个文件拷贝到想要的项目中。
HexspinBox.hHexspinBox.cpp2、在需要开发的项目中的窗口中,1、用Qt Designer创建一个新的窗体main.ui,把控件箱里的QSpinBox添加到窗体中。
2、右击微调框,选择“Promote to ”上下文菜单。
3、在弹出的对话框中,类名处填写“HexSpinBox”,头文件填写“hexspinbox.h”好了。
在ui生成的包含有QSpinBox的控件文件中,ui的源代码里面多了一段<customwidgets><customwidget><class>HSpinBox</class><extends>QSpinBox</extends><header>hspinbox.h</header></customwidget>包含文件变为"hexspinbox.h"。
在Qt Designer中,QSpinBox表示的控件为HexSpinBox,并且可以设置所有的QSpinBox的属性。
可以在VS2008中编译一下main.ui文件,从ui_main.h源代码中可以知道,引入的控件是:升级法的缺点是不能在Qt Designer中设置自定义控件自己的特有属性,也不能够绘制自己。
这些问题可以用插件法解决。
插件法1.VS中创建Qt4 Design Plugin 工程,名称叫custom自动建立如下几个文件:自定义控件:custom.h,custom.cpp插件:customplugin.h,customplugin.cpp源代码如下:custom.hcustom.cppcustomplugin.hcustomplugin.cpp在其cpp的最后必须添加下面的宏:.........10........20........30........40........50........60........70........80........90........100. (1)10.......120.......130.......140. (150)2. 新建后,直接编译,会产生如下错误1>LINK : fatal error LNK1181: cannot open input file 'QtDesignerd.lib'这是因为此工程默认引用的是QtDesignerd.lib库,更改其为版本对应的库即可消除故障(VS2008是在项目的属性中Linker/input/Additional Dependencies中修改,我这里Debug配置使用的是QtDesignerd4.lib,Release 版本使用QtDesigner4.lib)。
python3+PyQt5+QtDesigner实现堆叠窗⼝部件本⽂是对《Python Qt GUI快速编程》的第9章的堆叠窗⼝例⼦Vehicle Rental⽤Python3+PyQt5+Qt Designer进⾏改写。
第⼀部分⽆借⽤Qt Designer,完全⽤代码实现。
第⼆部分则借⽤Qt Designer,快速实现。
第⼀部分:import sysfrom PyQt5.QtCore import (Qt)from PyQt5.QtWidgets import (QApplication, QComboBox, QDialog,QDialogButtonBox, QFrame, QGridLayout, QHBoxLayout, QLabel,QSpinBox, QStackedWidget, QVBoxLayout, QWidget)class VehicleRentalDlg(QDialog):def __init__(self, parent=None):super(VehicleRentalDlg, self).__init__(parent)vehicleLabel = QLabel("&Vehicle Type:")self.vehicleComboBox = QComboBox()vehicleLabel.setBuddy(self.vehicleComboBox)self.vehicleComboBox.addItems(["Car", "Van"])colorLabel = QLabel("Co&lor:")self.colorComboBox = QComboBox()colorLabel.setBuddy(self.colorComboBox)self.colorComboBox.addItems(["Black", "Blue", "Green", "Red","Silver", "White", "Yellow"])seatsLabel = QLabel("&Seats:")self.seatsSpinBox = QSpinBox()seatsLabel.setBuddy(self.seatsSpinBox)self.seatsSpinBox.setRange(2, 12)self.seatsSpinBox.setValue(4)self.seatsSpinBox.setAlignment(Qt.AlignRight|Qt.AlignVCenter)weightLabel = QLabel("&Weight:")self.weightSpinBox = QSpinBox()weightLabel.setBuddy(self.weightSpinBox)self.weightSpinBox.setRange(1, 8)self.weightSpinBox.setValue(1)self.weightSpinBox.setAlignment(Qt.AlignRight|Qt.AlignVCenter)self.weightSpinBox.setSuffix(" tons")volumeLabel = QLabel("Volu&me")self.volumeSpinBox = QSpinBox()volumeLabel.setBuddy(self.volumeSpinBox)self.volumeSpinBox.setRange(4, 22)self.volumeSpinBox.setValue(10)self.volumeSpinBox.setAlignment(Qt.AlignRight|Qt.AlignVCenter)self.volumeSpinBox.setSuffix(" cu m")mileageLabel = QLabel("Max. Mileage")eageLabel = QLabel("1000 miles")eageLabel.setAlignment(Qt.AlignRight|Qt.AlignVCenter)eageLabel.setFrameStyle(QFrame.StyledPanel|QFrame.Sunken)self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)self.stackedWidget = QStackedWidget()carWidget = QWidget()carLayout = QGridLayout()carLayout.addWidget(colorLabel, 0, 0)carLayout.addWidget(self.colorComboBox, 0, 1)carLayout.addWidget(seatsLabel, 1, 0)carLayout.addWidget(self.seatsSpinBox, 1, 1)carWidget.setLayout(carLayout)self.stackedWidget.addWidget(carWidget)vanWidget = QWidget()vanLayout = QGridLayout()vanLayout.addWidget(weightLabel, 0, 0)vanLayout.addWidget(self.weightSpinBox, 0, 1)vanLayout.addWidget(volumeLabel, 1, 0)vanLayout.addWidget(self.volumeSpinBox, 1, 1)vanWidget.setLayout(vanLayout)self.stackedWidget.addWidget(vanWidget)topLayout = QHBoxLayout()topLayout.addWidget(vehicleLabel)topLayout.addWidget(self.vehicleComboBox)bottomLayout = QHBoxLayout()bottomLayout.addWidget(mileageLabel)bottomLayout.addWidget(eageLabel)layout = QVBoxLayout()layout.addLayout(topLayout)layout.addWidget(self.stackedWidget)layout.addLayout(bottomLayout)layout.addWidget(self.buttonBox)self.setLayout(layout)self.buttonBox.accepted.connect(self.accept)self.buttonBox.rejected.connect(self.reject)self.vehicleComboBox.currentIndexChanged[str].connect(self.setWidgetStack)self.weightSpinBox.valueChanged[int].connect(self.weightChanged)self.setWindowTitle("Vehicle Rental")def setWidgetStack(self, text):if text == "Car":self.stackedWidget.setCurrentIndex(0)eageLabel.setText("1000 miles")else:self.stackedWidget.setCurrentIndex(1)self.weightChanged(self.weightSpinBox.value())def weightChanged(self, amount):eageLabel.setText("{0} miles".format(8000 / amount))app = QApplication(sys.argv)form = VehicleRentalDlg()form.show()app.exec_()第⼆部分:/home/yrd/eric_workspace/Vehicle/Ui_vehiclerentaldlg.py# -*- coding: utf-8 -*-# Form implementation generated from reading ui file '/home/yrd/eric_workspace/Vehicle/vehiclerentaldlg.ui'## Created by: PyQt5 UI code generator 5.7## WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_VehicleRentalDlg(object):def setupUi(self, VehicleRentalDlg):VehicleRentalDlg.setObjectName("VehicleRentalDlg")VehicleRentalDlg.resize(206, 246)self.gridlayout = QtWidgets.QGridLayout(VehicleRentalDlg)self.gridlayout.setContentsMargins(9, 9, 9, 9)self.gridlayout.setSpacing(6)self.gridlayout.setObjectName("gridlayout")self.buttonBox = QtWidgets.QDialogButtonBox(VehicleRentalDlg)self.buttonBox.setOrientation(QtCore.Qt.Horizontal)self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)self.buttonBox.setObjectName("buttonBox")self.gridlayout.addWidget(self.buttonBox, 4, 0, 1, 1)spacerItem = QtWidgets.QSpacerItem(188, 16, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.gridlayout.addItem(spacerItem, 3, 0, 1, 1)self.hboxlayout = QtWidgets.QHBoxLayout()self.hboxlayout.setContentsMargins(0, 0, 0, 0)self.hboxlayout.setSpacing(6)self.hboxlayout.setObjectName("hboxlayout")bel_6 = QtWidgets.QLabel(VehicleRentalDlg)bel_6.setObjectName("label_6")self.hboxlayout.addWidget(bel_6)eageLabel = QtWidgets.QLabel(VehicleRentalDlg)eageLabel.setFrameShape(QtWidgets.QFrame.StyledPanel)eageLabel.setFrameShadow(QtWidgets.QFrame.Sunken)eageLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) eageLabel.setObjectName("mileageLabel")self.hboxlayout.addWidget(eageLabel)self.gridlayout.addLayout(self.hboxlayout, 2, 0, 1, 1)self.stackedWidget = QtWidgets.QStackedWidget(VehicleRentalDlg)self.stackedWidget.setObjectName("stackedWidget")self.page_2 = QtWidgets.QWidget()self.page_2.setObjectName("page_2")self.gridlayout1 = QtWidgets.QGridLayout(self.page_2)self.gridlayout1.setContentsMargins(9, 9, 9, 9)self.gridlayout1.setSpacing(6)self.gridlayout1.setObjectName("gridlayout1")self.colorComboBox = QtWidgets.QComboBox(self.page_2)self.colorComboBox.setObjectName("colorComboBox")self.colorComboBox.addItem("")self.colorComboBox.addItem("")self.colorComboBox.addItem("")self.colorComboBox.addItem("")self.colorComboBox.addItem("")self.colorComboBox.addItem("")self.colorComboBox.addItem("")self.gridlayout1.addWidget(self.colorComboBox, 0, 1, 1, 1)bel_4 = QtWidgets.QLabel(self.page_2)bel_4.setObjectName("label_4")self.gridlayout1.addWidget(bel_4, 0, 0, 1, 1)bel_5 = QtWidgets.QLabel(self.page_2)bel_5.setObjectName("label_5")self.gridlayout1.addWidget(bel_5, 1, 0, 1, 1)self.seatsSpinBox = QtWidgets.QSpinBox(self.page_2)self.seatsSpinBox.setAlignment(QtCore.Qt.AlignRight)self.seatsSpinBox.setMinimum(2)self.seatsSpinBox.setMaximum(12)self.seatsSpinBox.setProperty("value", 4)self.seatsSpinBox.setObjectName("seatsSpinBox")self.gridlayout1.addWidget(self.seatsSpinBox, 1, 1, 1, 1)self.stackedWidget.addWidget(self.page_2)self.page = QtWidgets.QWidget()self.page.setObjectName("page")self.gridlayout2 = QtWidgets.QGridLayout(self.page)self.gridlayout2.setContentsMargins(9, 9, 9, 9)self.gridlayout2.setSpacing(6)self.gridlayout2.setObjectName("gridlayout2")self.weightSpinBox = QtWidgets.QSpinBox(self.page)self.weightSpinBox.setAlignment(QtCore.Qt.AlignRight)self.weightSpinBox.setMinimum(1)self.weightSpinBox.setMaximum(8)self.weightSpinBox.setObjectName("weightSpinBox")self.gridlayout2.addWidget(self.weightSpinBox, 0, 1, 1, 1)bel_3 = QtWidgets.QLabel(self.page)bel_3.setObjectName("label_3")self.gridlayout2.addWidget(bel_3, 1, 0, 1, 1)bel_2 = QtWidgets.QLabel(self.page)bel_2.setObjectName("label_2")self.gridlayout2.addWidget(bel_2, 0, 0, 1, 1)self.volumeSpinBox = QtWidgets.QSpinBox(self.page)self.volumeSpinBox.setAlignment(QtCore.Qt.AlignRight)self.volumeSpinBox.setMinimum(4)self.volumeSpinBox.setMaximum(22)self.volumeSpinBox.setProperty("value", 10)self.volumeSpinBox.setObjectName("volumeSpinBox")self.gridlayout2.addWidget(self.volumeSpinBox, 1, 1, 1, 1)self.stackedWidget.addWidget(self.page)self.gridlayout.addWidget(self.stackedWidget, 1, 0, 1, 1)self.hboxlayout1 = QtWidgets.QHBoxLayout()self.hboxlayout1.setContentsMargins(0, 0, 0, 0)self.hboxlayout1.setSpacing(6)self.hboxlayout1.setObjectName("hboxlayout1")bel = QtWidgets.QLabel(VehicleRentalDlg)bel.setObjectName("label")self.hboxlayout1.addWidget(bel)self.vehicleComboBox = QtWidgets.QComboBox(VehicleRentalDlg)self.vehicleComboBox.setObjectName("vehicleComboBox")self.vehicleComboBox.addItem("")self.vehicleComboBox.addItem("")self.hboxlayout1.addWidget(self.vehicleComboBox)self.gridlayout.addLayout(self.hboxlayout1, 0, 0, 1, 1)bel_4.setBuddy(self.colorComboBox)bel_5.setBuddy(self.seatsSpinBox)bel_3.setBuddy(self.volumeSpinBox)bel_2.setBuddy(self.seatsSpinBox)bel.setBuddy(self.vehicleComboBox)self.retranslateUi(VehicleRentalDlg)self.stackedWidget.setCurrentIndex(0)self.vehicleComboBox.currentIndexChanged['int'].connect(self.stackedWidget.setCurrentIndex) self.buttonBox.accepted.connect(VehicleRentalDlg.accept)self.buttonBox.rejected.connect(VehicleRentalDlg.reject)QtCore.QMetaObject.connectSlotsByName(VehicleRentalDlg)def retranslateUi(self, VehicleRentalDlg):_translate = QtCore.QCoreApplication.translateVehicleRentalDlg.setWindowTitle(_translate("VehicleRentalDlg", "Vehicle Rental"))bel_6.setText(_translate("VehicleRentalDlg", "Max. Mileage:"))eageLabel.setText(_translate("VehicleRentalDlg", "1000 miles"))self.colorComboBox.setItemText(0, _translate("VehicleRentalDlg", "Black"))self.colorComboBox.setItemText(1, _translate("VehicleRentalDlg", "Blue"))self.colorComboBox.setItemText(2, _translate("VehicleRentalDlg", "Green"))self.colorComboBox.setItemText(3, _translate("VehicleRentalDlg", "Red"))self.colorComboBox.setItemText(4, _translate("VehicleRentalDlg", "Silver"))self.colorComboBox.setItemText(5, _translate("VehicleRentalDlg", "White"))self.colorComboBox.setItemText(6, _translate("VehicleRentalDlg", "Yellow"))bel_4.setText(_translate("VehicleRentalDlg", "Co&lor:"))bel_5.setText(_translate("VehicleRentalDlg", "&Seats:"))self.weightSpinBox.setSuffix(_translate("VehicleRentalDlg", " tons"))bel_3.setText(_translate("VehicleRentalDlg", "Volu&me:"))bel_2.setText(_translate("VehicleRentalDlg", "&Weight:"))self.volumeSpinBox.setSuffix(_translate("VehicleRentalDlg", " cu m"))bel.setText(_translate("VehicleRentalDlg", "&Vehicle Type:"))self.vehicleComboBox.setItemText(0, _translate("VehicleRentalDlg", "Car"))self.vehicleComboBox.setItemText(1, _translate("VehicleRentalDlg", "Van"))/home/yrd/eric_workspace/Vehicle/vehiclerentaldlg.py# -*- coding: utf-8 -*-"""Module implementing VehicleRentalDlg."""import sysfrom PyQt5.QtCore import pyqtSlotfrom PyQt5.QtWidgets import QDialog,QApplicationfrom Ui_vehiclerentaldlg import Ui_VehicleRentalDlgclass VehicleRentalDlg(QDialog, Ui_VehicleRentalDlg):"""Class documentation goes here."""def __init__(self, parent=None):"""Constructor@param parent reference to the parent widget@type QWidget"""super(VehicleRentalDlg, self).__init__(parent)self.setupUi(self)self.vehicleComboBox.setFocus()@pyqtSlot(int)def on_weightSpinBox_valueChanged(self, amount):eageLabel.setText("{0} miles".format(8000 / amount))@pyqtSlot(str)def on_vehicleComboBox_currentIndexChanged(self, text):if text == "Car":eageLabel.setText("1000 miles")else:self.on_weightSpinBox_valueChanged(self.weightSpinBox.value())if __name__ == "__main__":app = QApplication(sys.argv)form = VehicleRentalDlg()form.show()app.exec_()运⾏结果:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
Qt里setLayout用法在Qt中,setLayout是一种常用的布局管理器函数,用于设置窗口或窗口部件的布局。
布局管理器是一种用于自动调整窗口部件位置和大小的工具,可以使界面更加灵活和适应不同的窗口尺寸。
本文将详细介绍Qt中setLayout的用法,包括创建布局管理器、设置布局管理器、添加和删除窗口部件等操作。
1. 创建布局管理器在使用setLayout之前,我们首先需要创建一个布局管理器。
Qt提供了几种常用的布局管理器,包括垂直布局(QVBoxLayout)、水平布局(QHBoxLayout)、网格布局(QGridLayout)等。
1.1 垂直布局(QVBoxLayout)垂直布局将窗口部件按照垂直方向依次排列,可以使用QVBoxLayout类来创建垂直布局管理器。
QVBoxLayout *layout = new QVBoxLayout();1.2 水平布局(QHBoxLayout)水平布局将窗口部件按照水平方向依次排列,可以使用QHBoxLayout类来创建水平布局管理器。
QHBoxLayout *layout = new QHBoxLayout();1.3 网格布局(QGridLayout)网格布局将窗口部件按照网格形式排列,可以使用QGridLayout类来创建网格布局管理器。
QGridLayout *layout = new QGridLayout();1.4 其他布局管理器除了上述常用的布局管理器,Qt还提供了一些其他的布局管理器,如堆叠布局(QStackedLayout)、表单布局(QFormLayout)等,根据实际需求选择合适的布局管理器。
2. 设置布局管理器创建布局管理器后,我们需要将其设置给窗口或窗口部件,以便布局管理器能够对窗口部件进行布局。
QWidget *widget = new QWidget();widget->setLayout(layout);在上述代码中,我们创建了一个QWidget对象widget,并通过setLayout函数将布局管理器layout设置给widget。