Qt信号映射:编辑发射器对象

Qt signal mapping: editing emitter object

本文关键字:发射器 对象 编辑 信号 映射 Qt      更新时间:2023-10-16

所以我动态地创建QPushButton对象,然后将它们映射到发出信号。从与信号相关联的插槽中,我想编辑对象的属性(在本例中是文本,即QPushButton::text())。

在头文件中的"dialog"类中,我有:

private:
QSignalMapper *signalMapper;
private slots:
    void buttonGeneric(QPushButton &button);
signals:
    void clicked(QPushButton &button);

在.cpp文件中的"dialog"类的构造函数中,我有:

signalMapper = new QSignalMapper(this);
for (int i = 0; i < 100; ++i)
{
    QPushButton *button = new QPushButton(QString::number(i + 1));
    connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
    signalMapper->setMapping(button, button);
    ui->gridLayout->addWidget(button, 2 + (i / 10), (i % 10));
}
connect(signalMapper, SIGNAL(mapped(QPushButton &button)), this, SIGNAL(clicked(QPushButton &button)));
connect(this, SIGNAL(clicked(QPushButton &button)), this, SLOT(buttonGeneric(QPushButton &button)));

最后在同一个。cpp文件的构造函数外,我有:

void dialog::buttonGeneric(QPushButton & button)
{
   button.setText("hello");
}

这段代码编译并运行,但是当我单击按钮时什么也没有发生。在应用程序调试输出中,我得到以下内容:

QObject::connect: No such signal QSignalMapper::mapped(QPushButton &button)
QObject::connect:  (receiver name: 'dialog')
QObject::connect: No such signal dialog::clicked(QPushButton &button)
QObject::connect:  (sender name:   'dialog')
QObject::connect:  (receiver name: 'dialog') 

再次,我试图将点击按钮的文本更改为新的内容。我该怎么做呢?

提前感谢。

QSignalMapper没有信号mapped(QPushButton&)。它确实有mapped(QWidget*),然而,这是一个得到释放你的按钮。所以你应该连接到这个信号(并修改你的对话信号&相应的插槽)。