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