Qt5学习笔记(9)——控件button使用的一些心得

来源:互联网 发布:老司机求网址 知乎 编辑:程序博客网 时间:2024/06/10 13:48

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

一般QToolButton会在QToolBar::addAction时创建,或者已经存在的action添加到QToolBar时创建。当然此按键肯定可以与普通案件一样初始化和使用。QToolButton支持自动强制显示模式。可以使用setAutoRaise()设置按钮浮动。

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

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

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

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


1.这次主要解决的问题就是怎么把QToolButton当作一个有开关之分的按钮来用,通过点击button达到控制其他控件的显示和隐藏。

刚开始使用了很多方法都不对,根本接收不到信号,无法判断按下/弹起,非常的郁闷不知道问题在哪。

使用的是下面的代码:

connect(btn_2,SIGNAL(toggled(bool)),this,SLOT(btn2_toggled(bool)));

然后查找了很多资料,终于发现了问题解决的方法。

一般情况下button为触发方式(trigger),只有设置为checkable的时候,转为切换状态即toggled。
默认状况下checkable是不选中的,Button默认为触发按钮(trigger button),按下去马上弹起来。
选中checkable后,Button变成切换按钮(toggle button),可以有两种状态:按下/弹起;此时该按钮可以发射 toggled(bool) 信号,与槽函setHidden(bool) 结合即可用于控件交替隐藏显示。

toggled和trigger区别:

toggle在实物上有开关的意思,这跟我们物理实验用的开关是一回事,两头表示两个状态:合上和断开。于是更准确的译法应该是切换,在两个状态间进行转换。在Qt中,checkable按纽或是图标的槽函数应该用toggled()事件来激活,也是这个道理。
trigger更有触发的意思。这个单词还有另一个意思就是板机,枪械上用来发射子弹的那种。我们很容易想到板机是没有开/关两种状态的,不能说让它一直关上,一直发射子弹,至少在造词时并没有想到激光武器一说,我想如果针对激光武器,那么要fire的时候应该就不是扣trigger了,而是按toggle。在Qt中,一般的按纽(uncheckable)的激活方式即是triggered()。


所以把代码改为下面就实现了:

btn_2->setCheckable(true);connect(btn_2,SIGNAL(toggled(bool)),this,SLOT(btn2_toggled(bool)));

2.关于button样式表设置,设置按钮为图片,达到按钮点击、滑过显示不同的图片的效果。

使用setStyleSheet比较简单。

实现效果的代码:

ui.colorButton->setFocusPolicy(Qt::NoFocus);//设置无聚焦~避免出现虚线框~//需要注意的是,尝试过CSS语法 border-style:none不能满足对应的要求。//border-image为程序启动后默认的背景//pressed为按下后的图片//hover为鼠标指向时的按钮图片//当然,还有选中后的图片~这个就自行处理了ui.colorButton->setStyleSheet("QPushButton {border-image:url(pic/border-image.jpg); font-size:24px;} \  QPushButton:hover:pressed {border-image:url(pic/pressed.jpg);font-size:24px;} \  QPushButton:hover:!pressed {border-image:url(pic/hover.jpg);font-size:24px;} ");



0 0