qt控件----button

来源:微信公众号「编程学习基地」

示例程序截图:
请添加图片描述

QPushButton

pushButton是Qt中最常用的按钮,主要使用的函数为以下几个

  • SetText //设置文字
  • SetMenu //设置菜单
  • Clicked //点击信号

QPushButton继承关系
请添加图片描述

UI拖拽一个pushbutton到界面上

UI实现

public:
    QPushButton *pushButton;
//初始化UI
void setupUi(QWidget *Widget)
{
    if (Widget->objectName().isEmpty())
        Widget->setObjectName(QStringLiteral("Widget"));
    Widget->resize(595, 402);
    /***** 初始化UI里面的控件 *****/
    pushButton = new QPushButton(Widget);
    pushButton->setObjectName(QStringLiteral("pushButton"));
    pushButton->setGeometry(QRect(90, 60, 75, 23));

    retranslateUi(Widget);

    QMetaObject::connectSlotsByName(Widget);
} // setupUi
//对UI进行修改
void retranslateUi(QWidget *Widget)
{
    Widget->setWindowTitle(QApplication::translate("Widget", "Widget", Q_NULLPTR));
    pushButton->setText(QApplication::translate("Widget", "abc ", Q_NULLPTR));
} // retranslateUi

代码实现
	QPushButton* button = new QPushButton(this);
    button->setGeometry(QRect(0,0,75,23));  //QRect(x坐标,y坐标,宽,高
    button->setText("开");
信号与槽

ui右键转到槽->clicked()

Qt Creater自动生成槽函数并且自动关联信号与槽

对槽函数进行修改

button切换
void Widget::on_pushButton_clicked()
{
    static int flag = 0;
    if(flag){
         flag = 0;
         ui->pushButton->setText("open");
    }
    else{
        flag = 1;
        ui->pushButton->setText("close");
    }
}

代码关联信号与槽

connect(this>button,SIGNAL(clicked(bool)),this,SLOT(My_pushButton_clicked()));
void Widget::My_pushButton_clicked()
{
    static int flag1 = 0;
    if(flag1){
         flag1 = 0;
         this->button->setText("开");
    }
    else{
        flag1 = 1;
        this->button->setText("关");
    }
}
设置菜单
MenuButton = new QPushButton(this);
MenuButton->setGeometry(QRect(0,90,75,23));  //QRect(x坐标,y坐标,宽,高

QMenu *pMenu = new QMenu(this);
QAction* Action1 = new QAction;
Action1->setText("first");
pMenu->addAction(Action1);
pMenu->addAction("Second");
pMenu->addSeparator();
pMenu->addAction("third");
pMenu->addAction("Fourth");
onnect(Action1, SIGNAL(triggered()), this, SLOT(slot_ClickMenu1()));

// 设置菜单
MenuButton->setMenu(pMenu);
//槽函数
void MainWindow::slot_ClickMenu1()
{
    QMessageBox msgBox;
        msgBox.setText("点击了第一个QMenu菜单");
        msgBox.exec();
}

QToolButton

QToolButton类提供了用于命令或选项可以快速访问的按钮,通常可以用在QToolBar
里面。一般不会放在Widget中直接使用

//一般toolbutton用来关联MainToolBar里面的QAction
ui->toolButton->setDefaultAction(ui->actionopen);

QRadioButton

QRadioButton 单选项按钮, 状态分为选中和未选中,单选框一般用于在多选1。
单选题

  • setText()函数
  • isChecked()函数
  • setChecked()函数
  • clicked()信号
  • QButtonGroup选项按钮组
QButtonGroup* sex;
/*          RadioButton CheckButton            */
    sex = new QButtonGroup;
    sex->setExclusive(true);   //重点    设置互斥
    sex->addButton(ui->radioButton,0);
    sex->addButton(ui->radioButton_2,1);
//关联信号
connect(sex, SIGNAL(buttonClicked(int)), this,SLOT(slot_RadioButton_checket(int)));
//槽函数
void MainWindow::slot_RadioButton_checket(int ButtonId)
{
    sex_index=ButtonId;
    switch(ButtonId)
    {
        case 0:
            qDebug()<<"点击了男";
        break;
        case 1:
            qDebug()<<"点击了女";
        break;
        default:
            qDebug()<<"default";
    }
}

QCheckBox

QCheckBox复选项按钮, 状态分为选中和未选中,复选框一般用于在多个中选
择多个。—— 多选题

  • setText()函数
  • setCheckState()函数
  • stateChanged()信号
  • QButtonGroup选项按钮组
QButtonGroup* love;
	love = new QButtonGroup;
    love->setExclusive(false); //重点    设置不互斥
    love->addButton(ui->checkBox,0);
    love->addButton(ui->checkBox_2,1);
    love->addButton(ui->checkBox_3,2);
//关联信号
connect(love, SIGNAL(buttonClicked(int)), this, SLOT(slot_CheckButton_checket(int)));
//槽函数
void MainWindow::slot_CheckButton_checket(int ButtonId)
{
    //love_index = ButtonId;
    switch(ButtonId)
    {
    case 0:
        qDebug()<<"点击了打王者";
        break;
    case 1:
        qDebug()<<"点击了看综艺";
        break;
    case 2:
        qDebug()<<"点击了聊妹纸";
        break;
    default:
        qDebug()<<"default";
        break;
    }
}
提交信息
void MainWindow::on_pushButton_2_clicked()
{
    QCheckBox* temp;
    QString love_info;
    /*     匹配每一个CheckButton判断那几个checkbutton是选中状态     */
    for(int i=0;i<3;i++)
    {
        temp = (QCheckBox*)love->button(i);
        if(temp->isChecked())
        {
            love_info+=QString::number(i);
        }
    }
    /*        弹出提示框          */
    QMessageBox msgBox;
        msgBox.setText("性别选择为:"+QString::number(sex_index)+"\t"
                       +"爱好选择为:"+love_info);
        msgBox.exec();
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

DeRoy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值