qt button 的checkable属性

本文探讨了C++编程中的类声明与实现规范,深入解析了Qt框架中命名空间的使用,Button组件的checkable属性及其实现切换状态的方法,以及moc元对象编译器在信号和槽机制中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一些基本的东西(做笔记,因为之前没有学习过C++,现在也是现学现用):

 

1.

    类的声明一般放在.h文件中,而类成员的实现一般放在相应的cpp文件中。main除外

2.

   关于Qt中的namespace(命名空间)-----遗留问题,例如

QT_BEGIN_NAMESPACE
 
class Ui_GotoCellDlg
{
  
      .............
      void setupUi(QWidget *GotoCellDlg)
     {
          .................
     }

}

namespace Ui {
    class GotoCellDlg: public Ui_GotoCellDlg {};
} // namespace Ui
 
QT_END_NAMESPACE

3. Button的一个性质为checkable...  这个性质害了我一个小时去查找。。。 
在Qt assistant中可以查找到button的一些性质,其中对checkable的解释为: 

   checkable : bool
      This property holds whether the button is checkable.

      By default, the button is not checkable.

    那么一般情况下button为触发方式(trigger),只有设置为checkable的时候,转为切换状态即toggled

    默认状况下checkable是不选中的,Button默认为触发按钮(trigger button),按下去马上弹起来

     选中checkable后,Button变成切换按钮(toggle button),可以有两种状态:按下/弹起;此时该按钮可以发射 toggled(bool) 信号,与槽函数setVisible(bool) 结合即可用于控件交替显示

  

toggled和trigger区别

  toggle在实物上有开关的意思,这跟我们物理实验用的开关是一回事,两头表示两个状态:合上和断开。于是更准确的译法应该是切换,在两个状态间进行转换。在Qt中,checkable按纽或是图标的槽函数应该用toggled()事件来激活,也是这个道理。

     trigger更有触发的意思。这个单词还有另一个意思就是板机,枪械上用来发射子弹的那种。我们很容易想到板机是没有开/关两种状态的,不能说让它一直关上,一直发射子弹,至少在造词时并没有想到激光武器一说,我想如果针对激光武器,那么要fire的时候应该就不是扣trigger了,而是按toggle。在Qt中,一般的按纽(uncheckable)的激活方式即是triggered()。

 

4. 关于moc (meta-object system : 元对象编辑器):

    一般只有用到信号和槽时才会用到MOC,因为采用信号和槽是Qt的特性,而C++没有,所以采用了MOC(元对象编译器)把信号和槽部分编译成C++语言。 一下是Qt assistant的解释::

    

The Meta-Object Compiler, moc, is the program that handles Qt's C++ extensions.

The moc tool reads a C++ header file. If it finds one or more class declarations that contain the Q_OBJECT macro, it produces a C++ source file containing the meta-object code for those classes. Among other things, meta-object code is required for the signals and slots mechanism, the run-time type information, and the dynamic property system.

The C++ source file generated by moc must be compiled and linked with the implementation of the class.

If you use qmake to create your makefiles, build rules will be included that call the moc when required, so you will not need to use the moc directly. For more background information on moc, see Why Doesn't Qt Use Templates for Signals and Slots?

用信号signals和槽slots需注意的基本问题是:
(1)、在类class声明中必须加入Q_OBJECT;
(2)、在CPP文件中要把信号signals和槽slots联系起来,即使用connect,例connect( iv, SIGNAL(clicked (QIconViewItem *)), this, SLOT( draw()));

再次强调:只要按上述方式就行了,因为MOC文件的生成和继承都是自动的!!!

 

 

这个世界不会怜悯那些被屠宰者,而会尊敬那些一直在战斗着的人们

### 如何在 Qt 中自定义 QPushButton 的样式和行为 #### 自定义 QPushButton 样式 为了实现带有特定样式的 `QPushButton`,可以利用 QSS (Qt Style Sheets),这是一种类似于 CSS 的机制来设置控件外观。对于带有菜单的 `QPushButton`,可以通过使用 `::menu-indicator` 子控件来自定义其显示效果[^1]。 下面是一个简单的例子展示如何通过 QSS 来改变按钮的颜色、字体大小和其他视觉特性: ```css /* 定义全局样式 */ QPushButton { background-color: lightblue; color: black; font-size: 14px; } /* 当鼠标悬停时应用不同的背景颜色 */ QPushButton:hover { background-color: blue; color: white; } ``` 如果想要更进一步定制化,比如修改按下状态下的表现形式,则可以在上述基础上增加更多细节配置: ```css QPushButton:pressed { background-color: darkBlue; border-style: inset; } ``` 针对带菜单指示器的情况,可专门为此部分指定样式: ```css QPushButton::menu-indicator { image: url(:/path/to/custom/image.png); subcontrol-position: right center; } ``` 以上代码片段展示了基本的样式设定方法;实际项目中可能还需要考虑更多的场景与交互逻辑。 #### 设置 QPushButton 属性 除了外观上的变化外,还可以通过对 `QPushButton` 类的不同属性进行操作以达到功能性的增强或调整。这包括但不限于文本内容、图标位置等。要访问这些选项,在头文件中包含 `<QPushButton>` 并链接相应的模块即可[^2]。 以下是几个常用的属性及其作用说明: - **text**: 设定按钮上显示的文字。 - **icon**: 添加到按钮旁边的小图片。 - **checkable**: 是否允许作为复选框工作(即点击后保持选定状态)。 - **autoDefault**: 控制该按钮是否自动成为窗口中的默认按钮。 示例代码如下所示: ```cpp #include <QPushButton> // 创建一个新的按钮对象并初始化某些参数 QPushButton *button = new QPushButton("Click Me", parentWidget); // 更改按钮文字 button->setText(tr("New Text")); // 启用检查模式 button->setCheckable(true); // 连接槽函数处理点击事件 connect(button, SIGNAL(clicked()), this, SLOT(onButtonClicked())); ``` 综上所述,既可以从视觉层面也能够从业务逻辑角度出发对 `QPushButton` 实施个性化改造,从而满足多样化的应用场景需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值