QT进阶------------------QPushButton(快速添加按钮与使用)

14 篇文章 0 订阅
6 篇文章 1 订阅

1、解决如何快速的添加按钮

      在qt中,通常我们喜欢一个按钮添加一个信号与槽,但是这样写太过浪费时间。要是多个按钮那不是要写30个信号与槽,说实话,我不太喜欢这样。

     在ui中,只要拖动按钮,会自动生成按钮的名字,一般都是pushButton,pushButton_2,pushButton_3这样,这样写多了,别人看你的代码与ui都很繁杂,这样写就显得很low,别人看很不方便,你自己写模块功能,按钮多了,每次都要切到ui看一样,这样都很烦。

     在qt中,有一个类叫按钮组,提供按钮编号的功能,把一类按钮可以放在一个组中,这样一个组一个模块,方便管理与减少代码量。

   使用QT的类:

   

#include<QButtonGroup>

   声明按钮组:

QButtonGroup   *rightBtnGroup;   //右侧

实例化按钮组:

  rightBtnGroup = new QButtonGroup();

添加多个按钮:

 for (int i = 37; i <= 43; ++i) {
        QString buttonName = QString("pushButton_%1").arg(i);
        QPushButton *button = findChild<QPushButton *>(buttonName); // 在ui中查找按钮
        if (button) {
            rightBtnGroup->addButton(button, i); // 将按钮添加到按钮组中,并指定 ID
        }
    }

注意:ui中,一般默认第一个按钮是pushButton,改成pushButton_1,格式保持一致。

信号与槽

connect(rightBtnGroup, &QButtonGroup::idClicked, this, &xxxx::rightButtonGroupClicked);  //右侧按钮

槽函数

void yourclass::rightButtonGroupClicked(int num)
{
    if(num==37)
    {
        xxx
    }
    else  if(num==38)
    {
        xxx
    }
    else  if(num==39)
    {
        xxx
    }
    else  if(num==40)
    {
        xxx
    }
    else  if(num==41)
    {
        xxx
    }
    else  if(num==42)
    {
        xxx
    else  if(num==43)
    {
       xxx
    }
}

2、好处

1、减少代码量

2、一类按钮可以放在一个按钮组中,写一些界面跳转功能,比较简单的小功能,真的很方便。

3、按钮组除了可以添加pushButton,也可以添加ToolButton等,设置单选,也可以设置多选

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt使用ROS2,可以使用rclcpp库连接ROS2。要实现按钮切换,可以通过以下步骤实现: 1.创建一个Qt应用程序,并添加一个QPushButton控件。 2.在应用程序中创建一个ROS2节点,使用rclcpp库连接ROS2。 3.在QPushButton控件的槽函数中,实现ROS2话题发布器的开启和关闭。 下面是一个示例代码: ```cpp #include <QApplication> #include <QPushButton> #include <iostream> #include "rclcpp/rclcpp.hpp" #include "std_msgs/msg/string.hpp" class MyNode : public rclcpp::Node { public: MyNode() : Node("my_node") { publisher_ = this->create_publisher<std_msgs::msg::String>("topic", 10); timer_ = this->create_wall_timer(std::chrono::seconds(1), std::bind(&MyNode::timer_callback, this)); } private: void timer_callback() { auto message = std_msgs::msg::String(); message.data = "Hello, world!"; publisher_->publish(message); } rclcpp::Publisher<std_msgs::msg::String>::SharedPtr publisher_; rclcpp::TimerBase::SharedPtr timer_; }; int main(int argc, char** argv) { QApplication app(argc, argv); // 创建ROS2节点 rclcpp::init(argc, argv); auto node = std::make_shared<MyNode>(); // 创建QPushButton控件 QPushButton button("Toggle Publisher", nullptr); bool publisher_running = false; QObject::connect(&button, &QPushButton::clicked, [&]() { if (publisher_running) { // 关闭ROS2话题发布器 publisher_running = false; std::cout << "Stopping publisher..." << std::endl; } else { // 开启ROS2话题发布器 publisher_running = true; std::cout << "Starting publisher..." << std::endl; } }); button.show(); // 进入Qt主循环 int result = app.exec(); // 关闭ROS2节点 rclcpp::shutdown(); return result; } ``` 在这个示例中,我们创建了一个名为"MyNode"的ROS2节点,并在定时器回调函数中发布了一个字符串消息。然后,我们在QPushButton控件的槽函数中切换了ROS2话题发布器的开启和关闭状态。最后,我们进入Qt主循环,等待用户交互事件的发生。 注意:为了使ROS2节点能够正常工作,需要在终端中运行ROS2系统的核心组件(如roscore)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值