Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt信号映射:编辑发射器对象_C++_Qt_Signals_Slot_Qpushbutton - Fatal编程技术网

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

C++ Qt信号映射:编辑发射器对象,c++,qt,signals,slot,qpushbutton,C++,Qt,Signals,Slot,Qpushbutton,所以我动态地创建QPushButton对象,然后映射它们以发出信号。 从与信号关联的插槽中,我想要编辑对象的属性(在本例中为文本,即QPushButton::text()) 在头文件中的类“dialog”中,我有: private: QSignalMapper *signalMapper; private slots: void buttonGeneric(QPushButton &button); signals: void clicked(QPushButton

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

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

private:
QSignalMapper *signalMapper;

private slots:
    void buttonGeneric(QPushButton &button);

signals:
    void clicked(QPushButton &button);
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)));
void dialog::buttonGeneric(QPushButton & button)
{
   button.setText("hello");
}
在.cpp文件中的“dialog”类的构造函数中,我有:

private:
QSignalMapper *signalMapper;

private slots:
    void buttonGeneric(QPushButton &button);

signals:
    void clicked(QPushButton &button);
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)));
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
没有映射的信号
(QPushButton&)
。它确实有
映射(QWidget*)
,但是,它是为您的按钮发出的。因此,您应该连接到此信号(并相应地修改对话框信号和插槽)。

但是,如果我像您建议的那样将QWidget作为参数传递,那么我将如何访问QPushButton的文本属性?QWidget没有“setText()”方法。@user1545986您可以使用
qobject\u cast
,或者如果您确定对象始终是您期望的类型,
static\u cast