Namespaces
Variants
Actions

Mapping signal via signalMapper

Jump to: navigation, search
Article Metadata

Tested with
Devices(s): Emulator

Compatibility
Platform(s): S60 3rd Edition FP1, S60 3rd Edition FP2, S60 5th Edition

Article
Keywords: QSignalMapper
Created: mind_freak (21 Apr 2009)
Last edited: hamishwillee (11 Oct 2012)

Contents

Introduction

This example demonstrates how to use the QSignalMapper, a class for mapping parameterless signals from a set of objects to a single signal that contains a parameter identifying the original sending object.

Preconditions

  • Download and install the Qt SDK

Source Code

Main.cpp

#include <QtGui/QApplication>
#include "buttonwidget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QStringList fonts;
fonts << "Nokia" << "QT for S60" << "Python" << "J2ME";
ButtonWidget w(fonts);
w.show();
return a.exec();
}

ButtonWidget.h

#ifndef BUTTONWIDGET_H
#define BUTTONWIDGET_H
 
#include <QtGui/QWidget>
#include<QSignalMapper>
#include<QPushButton>
#include<QGridLayout>
#include<QStringList>
class ButtonWidget : public QWidget
{
Q_OBJECT
 
public:
ButtonWidget(QStringList texts,QWidget *parent = 0);
 
signals:
void clicked(const QString &text);
 
private:
QSignalMapper *signalMapper;
};
 
#endif // BUTTONWIDGET_H

ButtonWidget.cpp

#include "buttonwidget.h"
 
ButtonWidget::ButtonWidget(QStringList texts,QWidget *parent)
: QWidget(parent)
{
signalMapper = new QSignalMapper();
 
QGridLayout *gridLayout = new QGridLayout;
for (int i = 0; i < texts.size(); ++i) {
QPushButton *button = new QPushButton(texts[i]);
connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
signalMapper->setMapping(button, texts[i]);
gridLayout->addWidget(button, i / 3, i % 3);
}
 
connect(signalMapper, SIGNAL(mapped(const QString &)),
this, SIGNAL(clicked(const QString &)));
 
setLayout(gridLayout);
}
 
ButtonWidget::~ButtonWidget()
{
if(signalMapper)
delete signalMapper;
}

Explanation

A list of texts is passed to the constructor. A signal mapper is constructed and for each text in the list a QPushButton is created. We connect each button's clicked() signal to the signal mapper's map() slot, and create a mapping in the signal mapper from each button to the button's text. Finally we connect the signal mapper's mapped() signal to the custom widget's clicked() signal. When the user clicks a button, the custom widget will emit a single clicked() signal whose argument is the text of the button the user clicked.

ScreenShot

Signalmapping.JPG

Related Links

Mapping of StandardItemModel via DataWidgetMapper in Qt

This page was last modified on 11 October 2012, at 04:17.
141 page views in the last 30 days.
Nokia Developer aims to help you create apps and publish them so you can connect with users around the world.

京ICP备05048969号  © Copyright Nokia 2013 All rights reserved