【问题标题】:Qt and C++: Signal & Slot on multiple PushButtonsQt 和 C++:多个按钮上的信号和插槽
【发布时间】:2020-10-28 11:16:04
【问题描述】:

我通过以下方式创建多个 QPushButton:

QList<QByteArray> pBList;
    pBList= rec_data.split(',');

    for (int i = 1; i < pBList.size() -1; i++){             
        QPushButton *newpB = new QPushButton(ui->verticalLayoutWidget);
        newpB->setText(pBList[i]);
        ui->verticalLayoutWidget->layout()->addWidget(newpB);
    }

这工作正常,QPushButtons 显示在 GUI 上。 但是我如何将它们连接到 clicked()-Signal 和 Slot? 我用这种方法试过了,但是这不起作用...

QObject::connect(ui->verticalLayoutWidget->layout()->itemAt(1)->widget(), SIGNAL(clicked()),this, SLOT(_on_send_name()));

感谢您的帮助

【问题讨论】:

  • 为什么不起作用?为什么不直接连接项目,当你创建它?
  • 你暴露的代码看起来还不错。请澄清这不起作用... 编译器错误?信号不起作用?您是否将_on_send_name 设置为插槽?顺便提一句。使用新的 Qt5 信号/槽概念,您可以获得编译时检查(与运行时检查相反),并且您不需要将信号处理程序明确标记为槽。 (可以使用任何函数或成员函数,包括 lambda 函数。)仅供参考:New Signal Slot Syntax
  • @Scheff 我确实将函数 _on_send_name 设为了一个插槽,但就像你说的信号不起作用。当我单击 PushButton 时,它不会进入函数,而是直接进入下一行
  • 当我点击 PushButton 时,它不会进入函数,而是直接进入下一行 抱歉,我不明白。下一行是什么?信号处理程序是从事件循环中调用的事件处理程序中调用的(在QApplication 中)。仅供参考:SO: How to call defined slots from keypress event in qt / How to connect keypressed event with QPushbutton on gui? 带有 lambda 函数的信号处理程序示例。

标签: c++ qt signals-slots qpushbutton


【解决方案1】:
QList<QByteArray> pBList;
    pBList= rec_data.split(',');

    for (int i = 1; i < pBList.size() -1; i++){             
        QPushButton *newpB = new QPushButton(ui->verticalLayoutWidget);
        newpB->setText(pBList[i]);
        ui->verticalLayoutWidget->layout()->addWidget(newpB);
        //This will CONNECT all buttons to a single slot
        connect (newpB,&QPushButton::clicked,this,&YOUR_CLASS_NAME::_on_send_name);
    }

您可以在_on_send_name 中使用sender() 来获取指向单击按钮的指针。但不推荐 sender() 。 https://doc.qt.io/qt-5/qobject.html#sender

【讨论】:

    【解决方案2】:

    对于您的场景,我会选择 QSignalMapper

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-12
      • 2011-04-08
      • 1970-01-01
      • 2016-07-05
      • 2012-10-15
      • 2015-07-18
      • 2013-09-27
      相关资源
      最近更新 更多