QT开发中文网

class ButtonItem : public QWidget { Q_OBJECT private: public: QPushButton *left_btn; QPushButton *right_btn; ButtonItem(int item_type, QWidget *parent = nullptr) : QWidget(parent) { connect(left_btn, &QPushButton::clicked, ...

您的 ButtonItem 类定义了一些基本的组件和信号,但是存在一些问题需要修正,特别是在初始化按钮和连接信号时。下面是一个更完整和正确的实现示例:

#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>

class ButtonItem : public QWidget {
    Q_OBJECT

public:
    QPushButton *left_btn;
    QPushButton *right_btn;

    ButtonItem(int item_type, QWidget *parent = nullptr) : QWidget(parent) {
        // 初始化按钮
        left_btn = new QPushButton("Left Button", this);
        right_btn = new QPushButton("Right Button", this);

        // 布局管理器
        QVBoxLayout *layout = new QVBoxLayout(this);
        layout->addWidget(left_btn);
        layout->addWidget(right_btn);

        // 连接按钮的点击信号到自定义信号
        connect(left_btn, &QPushButton::clicked, this, [this]() {
            emit leftButtonClicked(left_btn); // 发出左侧按钮点击信号
        });
        
        connect(right_btn, &QPushButton::clicked, this, [this]() {
            emit rightButtonClicked(right_btn); // 发出右侧按钮点击信号
        });
    }

signals:
    void leftButtonClicked(QPushButton* left_btn);  // 定义左侧按钮点击信号
    void rightButtonClicked(QPushButton* right_btn); // 定义右侧按钮点击信号
};

改进点:

  1. 创建按钮: 在构造函数中,我添加了对 left_btnright_btn 的初始化,确保它们是有效的对象。
  2. 布局管理: 使用 QVBoxLayout 来管理这两个按钮的位置,使它们在窗口中垂直排列。
  3. lambda 表达式: 信号连接部分保持不变,但省略了多余的参数捕获,这样简化了代码。

使用这个类:

当您创建一个 ButtonItem 对象时,它将自动生成两个按钮并设置好相应的信号与槽。在其他地方,您可以通过连接这些自定义信号来响应按钮事件,例如:

// 示例使用方式
ButtonItem *buttonItem = new ButtonItem(0);
connect(buttonItem, &ButtonItem::leftButtonClicked, [](QPushButton* btn){
    qDebug() << "Left button clicked!";
});
connect(buttonItem, &ButtonItem::rightButtonClicked, [](QPushButton* btn){
    qDebug() << "Right button clicked!";
});

这样,当用户点击任意一个按钮时,将会发射对应的信号,并执行相应的槽函数。请根据需要进行进一步调整!如果有任何疑问或进一步的问题,请随时询问。


内容由零声教学AI助手提供,问题来源于学员提问

目录导航
  • 改进点:
  • 使用这个类:
  • 本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
    转载请注明出处:http://qt.0voice.com/?id=13353

    分享:
    扫描分享到社交APP
    上一篇
    下一篇
    发表列表
    游客 游客
    此处应有掌声~
    评论列表

    还没有评论,快来说点什么吧~

    联系我们

    在线咨询: 点击这里给我发消息

    微信号:3007537140

    上班时间: 10:30-22:30

    关注我们
    x

    注册

    已经有帐号?