1
所以我动态创建QPushButton对象,然后将它们映射为发射信号。 从与信号相关的插槽中,我想编辑对象的属性(在本例中为文本,即QPushButton :: text())。Qt信号映射:编辑发射器对象
在头文件中的类“对话框中的”我有:
private:
QSignalMapper *signalMapper;
private slots:
void buttonGeneric(QPushButton &button);
signals:
void clicked(QPushButton &button);
在“对话框中的”类在.cpp文件中构造我:
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");
}
此代码编译并运行,但当我单击按钮没有g发生。在应用程序调试输出我得到如下:
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')
如此反复,我想点击的按钮上的文字变成新的东西。 我该怎么做?
预先感谢您。
但是,如果我将QWidget作为参数传递给你,那么我将如何访问QPushButton的文本属性? QWidget没有“setText()”方法。 – Aske 2013-05-10 17:02:57
@ user1545986您可以使用'qobject_cast',或者如果您确定对象将始终是您期望的类型'static_cast'。 – Angew 2013-05-10 17:16:04
谢谢你的精彩帮助!这解决了它! – Aske 2013-05-10 17:21:05