Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- MdiWindow::MdiWindow( QWidget *parent ) : QMainWindow( parent ) {
- setWindowTitle( tr( "MDI" ) );
- QWorkspace* workspace = new QWorkspace;
- setCentralWidget( workspace );
- connect( workspace, SIGNAL(windowActivated(QWidget *)), this, SLOT(enableActions()));
- QSignalMapper* mapper = new QSignalMapper( this );
- //my problem is in this line
- connect( mapper, SIGNAL(mapped(QWidget*)), workspace, SLOT(setActiveWindow(QWidget*)) );
- createActions();
- createMenus();
- createToolbars();
- statusBar()->showMessage( tr("Done") );
- enableActions();
- }
- class ButtonWidget : public QWidget {
- Q_OBJECT
- public:
- ButtonWidget(QStringList texts, QWidget *parent = 0);
- signals:
- void clicked(const QString &text);
- private:
- QSignalMapper *signalMapper;
- };
- ButtonWidget::ButtonWidget(QStringList texts, QWidget *parent)
- : QWidget(parent)
- {
- signalMapper = new QSignalMapper(this);
- 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);
- }
- connect(signalMapper, SIGNAL(mapped(const QString &)),
- this, SIGNAL(clicked(const QString &)));
- TestClass::TestClass() {
- widget = new ButtonWidget(QStringList() << "Foo" << "Bar");
- connect(widget, SIGNAL(clicked(const QString &)),
- this, SLOT(onButtonClicked(const QString &)));
- }
- void TestClass::onButtonClicked(const QString &btnText) {
- if (btnText == "Foo") {
- // Do stuff.
- }
- else {
- // Or something else.
- }
- }
- mySignalMapper:
- [ obj1 -> 42 ]
- [ obj2 -> "obiwan" ]
- [ obj3 -> myWidget ]
- connect(obj1,mySignal,mySignalMapper,SLOT(map())); // idem for obj2 and obj3
- (obj2 emits "mySignal")
- -> (mySignalMapper::map slot is called)
- -> (sender() == obj2, associated data = "obiwan")
- -> (mySignalMapper emits mapped("obiwan"))
Add Comment
Please, Sign In to add comment