Qt信号映射:编辑发射器对象
Qt signal mapping: editing emitter object
所以我动态地创建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*)
,然而,这是一个得到释放你的按钮。所以你应该连接到这个信号(并修改你的对话信号&相应的插槽)。
相关文章:
- 提升 ASIO 无法识别计时器对象
- 错误:"释放后使用包装器对象 (WRAPPER_ESCAPE)"
- 对于BTreeMap和其他依赖于Ord的东西,是否有等效于C++比较器对象?
- Qt访问每个类中的查看器对象?
- 使用二进制搜索树中的迭代器对象访问左侧节点
- Yaml-cpp:在发射器中的每个新映射之前禁用自动开始文档 (---)
- 使用433Mhz发射器实时发送PWM值
- 如何从 QQuickFramebufferObject 中访问关联的渲染器对象
- 避免 RAII 计时器对象中的虚假构造和破坏
- 重用 Boost 的计时器对象
- 如何修复结构播放器对象中的矢量位置,以便它在 Main 中与 me.position 一起使用?
- 返回一个 const 和非 const 包装器对象
- 通过包装器对象的构造函数将依赖关系传递给包装器对象
- Qt信号是发射器,但信号似乎没有被触发
- 公开对象管理器对象的可接受方法?
- 使用装饰器模式时,是否可以在具体的装饰器对象中添加新的装饰器
- 暂停视频后C++如何访问构建器 6 媒体播放器对象中的当前帧
- 当通知程序/信号超出范围时,在提升绑定中解除分配回调侦听器对象
- 设计面向对象的同步接收器和发射器
- Qt信号映射:编辑发射器对象