topic4:Qt入门之常用qt控件认知之Button系列

按钮,常常被理解为触发一种动作请求或者命令,是与用户进行指令交互的操作。Qt中Button系列根据用途被划分为不同的定义,其实现框架为QAbstractButton提供按钮的通用性功能,此为抽象基类,所以无法进行实例化。用户需要继承定义此类,实现paintEvent,实现具体的展示。常见的Button有QPushButton,QToolButton,QRadioButton及QCheckBox。这种根据用户分为标记(toggle)的与非toggle的。此种模式用到的典型的c++一种抽象继承模式,将Button通用的抽象到QAbstractButton类,其余类继承,并根据自己的特点来实现画图展现的功能。为此我们从最基本的开始

1、QAbstractButton:此为按钮的抽象积累,提供按钮通用的功能。此类不能实例化,所以子类处理交互动作,尤其是如何绘制button。其为可按按钮(push button)和可检查(checkable)或切换(toggle)标记按钮提供支持。标记按钮的实现有QRadioButton单选按钮和QCheckBox多选框。可按俺就实现有QPushButton和QToolButton。他们都可以是标记切换,只要需要。

按钮都能显示一个可以包含文字text和图标icon的标签label,使用setText设置文本,setIcon设置图标。如果Button是个文本按钮,则包含的ampersand(‘&’)符号可以添加快捷键shoarcut key。

上述四种实现按钮可同时显示文字和图标。

1.1QAbstractButton可以提供大多数的Button的状态

1)isDown()表示按钮button是否是pressed down按下的

2)isChecked()表示按钮是否被检查或者标记切换的。只有可检查和切换(标记)的按钮可以标记或者取消标记checked or unchecked

3) isEnabled()表示按钮是否可以被用户点按

4)setAutoRepeat()设置按钮是否当用户长按按钮可以auto-repeat(自动重复执行),属性autoRepeatDelay和autoRepeatInterval定义了如何重复响应执行

5) setCheckable()设置按钮是否可切换或者标记的

1.2 QAbstractButton提供如下信号

1)pressed(),当鼠标在button上并点击左键的时候发射。

2)released(),当鼠标左键被释放的时候

3)clicked(bool checked=false),当鼠标首先按下pressed,然后释放,或者快捷键被触发,或者click()或者animateClick()调用

4) toggled() 当可切换(标记)按钮状态改变时发射

1.3 QAbstractButton抽象的按钮属性

1) autoExclusive:bool  标志自动互斥是否激活enabled。如果是激活的,那么属于同一父窗口的可标记chackabled按钮和他们属于一个互斥按钮组表现一样,只有一个按钮状态是checked标记的。

注意,此属性对于属于按钮组button group的按钮。默认是false的,对于radio按钮是true的

bool autoExclusive()及setAutoExclusive(bool)进行访问与设置

2)autoRepeat:bool标志是否重复点按激活的,默认是关的。如果是激活的时候pressed()/released()/clicked()信号会发射,在限定的interval。

注意:如果按钮被按下是通过快捷键shortcut key,此属性被激活并且时间是系统定义的,而不是此类定义的,信号正常发射。

autoRepeat()和setAutoRepeat(bool)设置是否自动重复按钮

3) autoRepeatDelay:int 表示自动哦重复的初始延时时间。

  用autoRepeatDelay()和setAutoRepeatDelay(int)设置时间,单位ms级的

4) autoRepeatInterval : int表示自动重复的时间间隔,setAutoRepeatInterval(int)进行设置

5)chekcable:bool 表示button是否可以checkable标记切换,

isCheckable()判断是否可标记,setCheckable(bool)设置

6)checked:bool 表示是否标记,isChecked()获取是否被标记,setChecked(bool)设置标志状态

注意,此属性必须在checkabled的button才能使用,会触发toggled(bool checked)信号

7)down :bool 表示button是否按下。isDown及setDown(bool)进行设置。

8)icon : QIcon 表示icon是否显示在button按钮上。icon的大小根据GUI类型定义的,但可以通过iconSize属性设置。

QIcon icon() : void setIcon(const QIcon &icon)

9)text : QString 属性保存按钮上显示的问题。

通过text()获取值,如果为空则返回一个空串。如果字符里面包含ampersand‘&’符号,则shortcut自动会创建。如果显示&字符,则使用‘&&’就可以了。

没有默认字符串,通过setText(const QString &)设置此值。

1.4 QAbstractButton抽象类提供的常见函数:

1)void QAbstractButton::animateClick ( int msec = 100 ) [slot],按钮会立即被按下pressed,并且msec时间后释放。如果没有释放继续调用此函数,则会重置释放时间。

所有的信号与click会被发射。如果button是disabled,此函数不工作。

2)void QAbstractButton::click () [slot]执行一次点按操作。所有与点按相关联的信号都会被发射,如果button是checkable,那么按钮的状态会切换toggled。如果按钮为disabled则不工作

3)void QAbstractButton::toggle () [slot] 切换按钮的状态,会触发toggled(bool checked)信号

2、QPushButton,是QAbstractButton的实现体。是一个command按钮,点击其执行一些动作或者响应一些问题,常见场景如ok,apply,cancel yse no help等。

命令按钮常用文本表示他的动作。

按钮最重要的状态是:

是否可用(disabled or enabled)

标准的push button 或者togglebutton 或者menu button

开启或者关闭(on or off),仅针对可切换按钮

default还是normal,默认按钮一般会被点击,在一个对话框里使用确定或返回键的时候

auto-repeat自动重复

pressed down 是否被按下

另外一个命令按钮的一个变体是菜单按钮。不仅提供一个命令,当其点击时会弹出一个菜单选项。使用setMenu方法可以将此按钮与弹出菜单选项关联

在一个对话框,按钮可以设置为default 和auto-default按钮。比如当对话框接受焦点的时候其自动获取焦点,可以使用setAutoDefault()设置。

需要注意的是auto-default按钮会占用稍微多一点的空间,及比一个正常按钮宽,用于汇话默认按钮的indicator标记,如果不需要则设置setAutoDefault(false)就可以了

2.1 添加属性:

1)autoDefault:bool

此属性保持命令按钮是否自动默认按钮,即auto default button

2)default:标志此命令按钮是一个默认按钮。

通过bool isDefault()获取、setDefault(bool)设置此属性

default和autoDefault属性决定了当用户在一个对话框按enter时发生的事情

如果一个属性被设置了default,则此按钮自动发射pressed信号,除非autoDefault按钮当前获取了焦点,则autoDefault按钮pressed被发射。

如果对话框dialog只有autoDefault按钮没有default按钮,则当前获取焦点的autoDefault按钮发射pressed,或者没有获取焦点的按钮,则下一个焦点连的按钮被发射。

一个对话框只有一个按钮是default默认按钮,此按钮需要额外的空间表示。

默认按钮default行为只在对话框使用。获取焦点的按钮总是可以被点击通过键盘的空格键

3) flat:bool表示是否显示按钮的border边框

bool isFlat()获取,setFlat(bool)进行设置。

默认值为false,如果设置为true,大多数情况,此按钮的背景不会绘画出来,除非按钮被点击。

setAutoFillBackground()可以用于保证背景可以使用QPalette::Button 格式刷绘画出来。

2.2 常见函数:

QPushButton::QPushButton ( QWidget * parent = 0 )

QPushButton::QPushButton ( const QString & text, QWidget * parent = 0 )

QPushButton::QPushButton ( const QIcon & icon, const QString & text, QWidget *parent = 0 )

创建一个命令按钮text用于描述,QIcon用于显示小图标

QMenu * QPushButton::menu () const

获取与button关联的弹出菜单,如果没有关联菜单返回0

void QPushButton::setMenu ( QMenu * menu )

关联一个菜单到按钮上,这样按钮就形成了菜单按钮

void QPushButton::showMenu () [slot]

显示与button相互关联的按钮,如果没有则什么都不操作。

此函数知道弹出菜单被关才会返回。

3、QRadioButton:单选按钮

单选按钮提供一个按钮和一个label,label用于显示对应的文本信息。

单选按钮是一种开关按钮,可以切换为on或者off即checked或者unchecked。主要用途用于提供给用户‘one of many’选择。如果用户选择另外一个单选按钮,则之前的就被反选了。默认是autoExclusive的,如果是激活的,属于同一个父类的单选按钮只能选中一个,如果需要多个

exclusive互斥选项在同一个父窗口使用,则将他们方知道QButtonGroup内。

不管切换开关都会发射toggle信号发射。

和QPushButton一样,一串文本显示内容,文本加&会自动创建快捷键

设置文本或icon使用抽象类的接口setText及setIcon实现。

4、QCheckBox:复选框,提供一个checkbox和一个文本label

同QRadioButton,是一个开关按钮,可切换状态on或者off,即checked或者unchecked。

一般,此复选框可以enable或者disable但不影响其他复选按钮。但是如果此放置到一个互斥的QButtonGroup里面,则只能选一个复选框。这是有互斥选项的QButtonGroup所限定的属性。

当checkbox复选框是checked标记或者清楚,都会触发stateChangeed信号。可以使用isChecked()去查询复选框按钮是否标记。

除了常用的选中与没选中状态,QCheckBox提供第三种状态即“没有改变”状态。这是很有用的,当你给用户一个既不选择又不反选的复选框。如果使用此状态,设置其属性setTristate(),然后用checkState()去查询当前标记切换的状态。

4.1 tristate:bool 表示此复选框是否是一个tri-state三态复选框

bool isTristate() setTristate(bool)查看及设置

4.2 常用函数:

Qt::CheckState QCheckBox::checkState () const

查看复选框的状态,如果不需要tristatus,直接可以用isChecked,其返回boolean值

void QCheckBox::setCheckState ( Qt::CheckStatestate )

设置当前复选框的状态。如果不需要支持tristate,则可以直接用setChecked(bool)

stateChanged(int state)信号:当复选框状态改变时。

5、QToolButton:顾名思义,就是工具操作相关的按钮。其是一种快速访问按钮命令或选项。所以通常和QToolBar搭配使用。工具按钮通常不显示文本,而显示图标QIcon。其主要搭配QToolBar上的QAction行为创建和使用的。

一般QToolButton会在QToolBar::addAction时创建,或者已经存在的action添加到QToolBar时创建。当然此按键肯定可以与普通案件一样初始化和使用。

QToolButton支持自动强制显示模式。可以使用setAutoRaise()设置按钮浮动。

QToolButton一个经典用法就是可以选择工具,及此按钮有开关之分,比如绘画图里面使用画笔,选择此按钮可以画东西了。

工具按钮图标设置为QIcon,这就可以区分不同的分辨率,在disabled和active活跃状态。如果按钮的功能不可用,则使用非使能disabled像素,激活的pixmap像素在按钮漂浮的时候显示,因为鼠标在上面。

工具按钮外观和特点可以通过设置按钮风格setToolButtonStyle和设置setIconSize修改。

QToolButton另外一个选择是弹出菜单,弹出菜单可以使用setMenu和setPopupMode()配置不同的可用的按钮携带一个菜单集合。弹出列表可以使用setPopupDelay。

5.1 属性:arrowType,箭头属性,按钮是否显示一个arrow代替正常的icon,默认显示Qt::NoArray

Q::ArrowType指箭头,显示为Qt::NoFocue,

enum Qt::ArrowType

ConstantValue

Qt::NoArrow   0

Qt::UpArrow   1

Qt::DownArrow   2

Qt::LeftArrow   3

Qt::RightArrow   4   表示箭头,setArrowType设置对应箭头显示位置

autoRaise悬浮框,是否变迁。

popupMode:描述弹出菜单属性,

toolButtonStyle:表示按钮文本和图片显示位置

 

t::ToolButtonIconOnly   0   Only display the icon.

Qt::ToolButtonTextOnly   1   Only display the text.

Qt::ToolButtonTextBesideIcon   2   The text appears beside the icon.

Qt::ToolButtonTextUnderIcon   3   The text appears under the icon.

Qt::ToolButtonFollowStyle   4   Follow the style.

toolButtonS显示文本和图片

 

t::ToolButtonIconOnly   0   Only display the icon.

Qt::ToolButtonTextOnly   1   Only display the text.

Qt::ToolButtonTextBesideIcon   2   The text appears beside the icon.

Qt::ToolButtonTextUnderIcon   3   The text appears under the icon.

Qt::ToolButtonFollowStyle   4

时间: 2024-08-01 19:07:56

topic4:Qt入门之常用qt控件认知之Button系列的相关文章

Qt入门之常用qt控件认知之QLayout

了解布局,首先得清楚一个概念,就是容器控件.容器控件就是可以容纳别的控件的一种控件,如QWidget,所以就会出现父类控件与子类控件.为了很好的管理这种父子类控件,常用的有几种方法: 第一种就是使用绝对位置,setGeometry定位子类控件相对于父类控件.第二种就是常见的布局. 布局管理,其实就是为容器控件管理子类控件的位置和尺寸,所以布局本身没有存在的意义,其需要和容器控件搭配使用,为容器控件管理子控件服务. 而布局QLayout类其实只是一组预先撰写好的代码,相当于提前写出了以一个控件存放

Qt入门之常用qt控件认知之QLabel

QLabel是Qt最为基本和常用的一个控件.其定义包含在<QLabel>中. 1.整体简介(QLabel功能):QLabel的功能就是显示文字或者图片,没有用户交互功能,这也就是经常不位QLabel控件设置焦点的原因,QLabel外观可以通过不同的方式进行设置,同时有一个非常重要的功能,其可以作为另外一个控件的焦点助记键,即设置QLabel快捷键则将焦点跳到指定的控件,如QLineEdit,此控件通过QLabel的setBuddy函数设置. QLabel可以使用的类型及设置方法: 纯出文本或者

Qt入门之常用qt控件认知之QLineEdit

QLineEdit是继QLabel和QAbstractButton之后最为常见的输入类编辑控件.顾名思义,其是单行编辑控件,经常用于编辑简短的信息,如用户登录信息及密码输入等.作为编辑框其具有常见的编辑动作,如清除内容clear,复制copy,剪切cut,粘贴paste,重做rudo.撤销undo,全选selectAll及设置编辑信息setText及删除dselete和del及backspace.根据编辑的内容及显示,QLineEdit有不同的显示模式:QLineEdit:::Normal 正常

基于Qt的第三方库和控件

====================== 基于Qt的第三方库和控件 ======================     libQxt --------   http://dev.libqxt.org/libqxt/wiki/Home   按照文档中所流露的意思,libQxt实现了一些“Qt本来就应该有但实际上没有”的功能. 对应Qt相应的Module,Qxt有 QxtCore.QxtGui.QxtNetwork.QxtSql等模块作为Qt功能的 补充,此外,还提供了QxtWeb(Web S

Qt编程之UI与控件布局

当然,大家都知道UI界面可以用Qt Designer在约束环境下设置编辑.ui文件,再将.ui文件转换成对应的ui_XXX.h文件,这头文件中的内容是:用C++语言实现真正的界面布局.uic -o "outputfile" "inputfile.ui"命令行可以转换 当然,也可以自己用C++来实现界面布局利用成员函数SetGeometry什么的,但是那样的开发效率就下降了,BUG概率引入的也会加大. 这篇文章很好的演示了只利用C++实现的界面设计布局: http:/

android_常用UI控件_01_TextView3_点击打开新的activity

点击textview打开新的activity (1) MainActivity.java package com.example.android_textview_opennewactivity; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.text.SpannableString; import android.text.Spanned;

android_常用UI控件_01_TextView4_rollingsubtitles效果加链接文字

(1)Mainactivity.java package com.example.android_textview_rollingsubtitles; import java.sql.Wrapper; import android.os.Bundle; import android.app.Activity; import android.text.Html; import android.text.TextUtils; import android.text.TextUtils.Truncat

基于jQuery 常用WEB控件收集

Horizontal accordion: jQuery 基于jQuery开发,非常简单的水平方向折叠控件. Horizontal accordion: jQuery jQuery-Horizontal Accordion 具有XBOX360 blade界面风格的水平方向Accordion. jQuery-Horizontal Accordion AutoComplete-JQuery jQuery插件易于集成到现在的表单中(Form). AutoComplete-JQuery Facebook

android_常用UI控件_01_TextView2

显示图片和文字 MainActivity.java package com.example.android_textview_showqqface; import java.lang.reflect.Field; import android.os.Bundle; import android.app.Activity; import android.graphics.Color; import android.graphics.drawable.Drawable; import android