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  

原文地址:https://www.cnblogs.com/alleyonline/p/4744570.html