如何使用QSignalMapper将整数映射到数字?

时间:2016-05-27 21:09:03

标签: qt qsignalmapper

我在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";
}

2 个答案:

答案 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时需要注意三点:

  1. 使用QSignalMapper方法在发件人setMapping实例和值(整数,字符串等)之间添加映射。

  2. 将发件人的信号连接到映射器中的QObject位置。

  3. 将映射器的map信号连接到映射的使用者。 mapped(ValueType)是您要映射到的类型 - 此处,它是ValueType

  4. screenshot of the example

    QString