我在Qt中使用简单的应用程序时遇到问题。该应用程序看起来像一个简单的计算器与按钮(数字从0到9)。
点击一个按钮后,应用程序应在应用程序的输出上显示相应的数字作为数字和数字(一个单词)。
我需要使用QSignalMapper
。我该如何解决这个问题?
到目前为止我的代码:
QLayout* Widget::createButtons()
{
QGridLayout *lt = new QGridLayout(this);
QSignalMapper *signalMapper = new QSignalMapper(this);
connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(keyPressed(int)));
QString txtButtons[10] = {"zero", "one", "two",
"three", "four", "five",
"six", "seven", "eight",
"nine"};
for(int i=0; i<10; i++) {
buttons[i] = new QPushButton(txtButtons[i], this);
signalMapper->setMapping(buttons[i], i);
connect(buttons[i], SIGNAL(clicked()), signalMapper, SLOT(map()));
lt->addWidget(buttons[i], i/3, i%3);
}
return lt;
}
void Widget::keyPressed(int buttonID)
{
qDebug() << QString::number(buttonID) + " was clicked";
}
答案 0 :(得分:0)
QString::number(buttonID)
仅将文字显示为数字,但不会在单词中打印该数字。如需单词打印,您可以回收QString txtButtons[]
:
QString txtButtons[10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
(它应该是txtButtons [9],0也是计数!但你可以更好地使用QStringList
http://doc.qt.io/qt-4.8/qstringlist.html)
在数字后面显示:
void Widget::keyPressed(int buttonID)
{
qDebug() << QString::number(buttonID) + ", " + **txtButtons[buttonID]** + " was clicked";
}
答案 1 :(得分:0)
有关将多个对象中的一个对象映射到值的三种方法,请参阅this question。在Qt 5中不需要使用heroku domains:add
,在Qt 4中是可选的。
以下是在Qt4 / 5中使用QSignalMapper
的示例。使用QSignalMapper
时需要注意三点: