QT部件与事件处理第二讲清华大学计算机系课程主要内容用户界面组件介绍部件的布局管理通用部件部件的尺寸策略QtDesigner顶层窗体Qt图标Qt事件处理2用户界面组件介绍3用户界面组件用户界面由单个部件(widget)构成QLabelQPushButtonQLineEditQDoubleSpinBoxQScrollBar4部件中的部件部件被分层次放置容器类提供可视化结构,但同时也是具有一定功能化的如QRadioButton,需要用彼此间实现互斥,可以将多个QRadioButton放到一个GroupBox中QGroupBoxQTabWidget5部件的特点占据屏幕中一个方形的区域从输入设备接收事件当部件产生变化时,发出信号多个部件以层次式的方法组合构建一个部件中可以包含其他部件6部件的布局管理7一个对话框例子部件被放置在布局管理器中—使用户界面具有弹性易伸缩8弹性好在哪里?让部件的大小适应内容让部件适应翻译变化让部件适应用户设置,如字体设置等9布局管理几种可用的布局布局管理器和部件“协商”各个部件大小与位置弹簧可以用来填充空白处QGridLayoutQFormLayoutQVBoxLayoutQHBoxLayout10一个对话框例子对话框由多个层次的布局管理器和部件组成注意:布局管理器并不是其管理的部件的父对象11对话框例子QVBoxLayout*outerLayout=newQVBoxLayout(this);QHBoxLayout*topLayout=newQHBoxLayout();topLayout-addWidget(newQLabel(Printer:));topLayout-addWidget(c=newQComboBox());outerLayout-addLayout(topLayout);QHBoxLayout*groupLayout=newQHBoxLayout();...outerLayout-addLayout(groupLayout);outerLayout-addSpacerItem(newQSpacerItem(...));QHBoxLayout*buttonLayout=newQHBoxLayout();buttonLayout-addSpacerItem(newQSpacerItem(...));buttonLayout-addWidget(newQPushButton(Print));buttonLayout-addWidget(newQPushButton(Cancel));outerLayout-addLayout(buttonLayout);12对话框例子QHBoxLayout*groupLayout=newQHBoxLayout();QGroupBox*orientationGroup=newQGroupBox();QVBoxLayout*orientationLayout=newQVBoxLayout(orientationGroup);orientationLayout-addWidget(newQRadioButton(Landscape));orientationLayout-addWidget(newQRadioButton(Portrait));groupLayout-addWidget(orientationGroup);QGroupBox*colorGroup=newQGroupBox();QVBoxLayout*colorLayout=newQVBoxLayout(colorGroup);colorLayout-addWidget(newQRadioButton(BlackandWhite));colorLayout-addWidget(newQRadioButton(Color));groupLayout-addWidget(colorGroup);Horizontalbox,包含groupboxes,verticalboxes,radiobuttons13对话框例子可以使用Qt设计器来建立同样的结构14通用部件15通用部件Qt包含针对所有常见需求的大量通用部件Qt设计器中为部件组提供很好的概貌16通用部件―按钮所有按钮继承自QAbstractButton这个基本类。信号clicked()–当按钮被按下(并弹起后)发出。toggled(bool)–当按钮的状态发生改变时发出。属性checkable–当按钮可检查时为真。使按钮激活。checked–当按钮被标记时为真。(用于复选或单选按钮)text–按钮的文本。icon–按钮的图标(可以和文本同时显示)。QAbstractButtonQPushButtonQCheckBoxQRadioButton17通用部件―列表项部件QListWidget用于显示列表项添加项目addItem(QString)–将项目附加到列表末端insertItem(introw,QString)–将项目插入到指定行选择项目selectedItems–返回QListWidgetItem的列表,使用QListWidgetItem::text来形成文本信号itemSelectionChanged–当选择状态改变时发出QComboBox以更紧密的格式展示一个单选的项目列表。QListWidgetQComboBox18通用部件―容器容器部件用来结构化用户界面一个简单的QWidget对象可当做容器来使用设计器:将部件放置在容器中并为容器提供一个布局管理器代码:为容器创建一个布局管理器并将部件添加进布局管理器(布局管理器以容器为父对象)QGroupBox*box=newQGroupBox();QVBoxLayout*layout=newQVBoxLayout(box);layout-addWidget(...);...QGroupBoxQTabWidgetQFrame19通用部件―输入部件使用QLineEdit实现单行文本输入信号textChanged(QString)–文本状态改变时发出editingFinished()–部件失去焦点时发出returnPressed()–回车键被按下时发出属性text–部件的文本maxLength–限定输入的最大长度readOnly–设置为真时文本不可编辑(仍允许复制)QLineEdit20通用部件―输入部件使用QTextEdit和QPlainTextEdit实现多行文本输入SignalstextChanged()-文本状态改变时发出属性plainText–无定义格式文本html–HTML格式文本readOnly–设置为真时文本不可编辑QComboBox通过editable属性使其可编辑SignalseditTextChanged(QString)–当文本正被编辑时发出属性currentText–combobox的当前文本QComboBoxQTextEdit21通用部件―输入部件编辑整型数据有许多可选的输入部件也有许多用于double,time和date类型的部件信号valueChanged(int)–当数值更新时发出属性value–当前值maximum–最大值minimum–最小值QSliderQScrollBarQDialQSpinBoxQAbstractSlider22通用部件―显示部件QLabel部件显示文本或者图片属性text–标签文本pixmap–显示的图片QLCDNumber用于显示整形数值属性intValue–显示的数值(使用display(int)函数进行设置)QLabelQLCDNumberQLabel23通用部件―属性所有部件有一系列继承自QWidget类的共同属性enabled–用户交互可用或不可用visible–显示或不显示(show或hide函数)这些属性同时影响到子部件例如使一个容器部件不可用时:24QMessageBox信息框是可以显示提示信息,并接受用户按钮输入的一种对话框信息框使用方式一:静态函数StandardButtonQMessageBox::warning(QWidget*parent,constQString&title,constQString&text,StandardButtonsbuttons=Ok,StandardButtondefaultButton=NoButton)Parent:父组件指针Title:标题Text:提示文本Buttons:提示框中的按钮,可用或(|)运算添加多个按钮defaultButton:默认选中的按钮类似函数还有QMessageBox::information(…),QMessageBox::critical(…),QMessageBox::question(…),QMessageBox::about(…),…25QMessageBoxintret=QMessageBox::warning(this,tr(MyApplication),tr(Thedocumenthasbeenmodified.\nDoyouwanttosaveyourchanges?),QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,QMessageBox::Save);switch(ret){caseQMessageBox::Save://Savewasclickedbreak;caseQMessageBox::Discard://Don'tSavewasclickedbreak;caseQMessageBox::Cancel://Cancelwasclickedbreak;default://shouldneverbereachedbreak;}26QMessageBox信息框使用方式二:构造函数QMessageBox::QMessageBox(Iconicon,constQString&title,constQString&text,StandardButtonsbuttons=NoButton,QWidget*parent=0,Qt::WindowFlagsf=Qt::Dialog|Qt::MSWindowsFixedSizeDialogHint)icon:图标,可取值为MessageBox::NoIcon,QMessageBox::Question,QMessageBox::Information,QMessageBox::Warning,QMessageBox::CriticalTitle:标题Text:提示文本Buttons:提示框中的按钮,可用或(|)运算添加多个按钮parent:父组件指针F:窗口系统属性27QMessageBoxQMessageBoxmessage(QMessageBox::NoIcon,tr(MyApplication),tr(Thedocumenthasbeenmodified.\nDoyouwanttosaveyourchanges?),QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel);switch(message.exec()){caseQMessageBox::Save://Savewasclickedbreak;caseQMessageBox::Discard://Don'tSavewasclickedbreak;caseQMessageBox::Cancel://Cancelwasclickedbreak;default://shouldneverbereachedbreak;}28部件的尺寸策略29尺寸(size)的策略布局是在布局管理器和部件间进行协调的过程布局管理