【发布时间】: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