Guest User

Untitled

a guest
Jan 18th, 2019
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. MdiWindow::MdiWindow( QWidget *parent ) : QMainWindow( parent ) {
  2. setWindowTitle( tr( "MDI" ) );
  3. QWorkspace* workspace = new QWorkspace;
  4. setCentralWidget( workspace );
  5. connect( workspace, SIGNAL(windowActivated(QWidget *)), this, SLOT(enableActions()));
  6. QSignalMapper* mapper = new QSignalMapper( this );
  7.  
  8. //my problem is in this line
  9. connect( mapper, SIGNAL(mapped(QWidget*)), workspace, SLOT(setActiveWindow(QWidget*)) );
  10.  
  11. createActions();
  12. createMenus();
  13. createToolbars();
  14. statusBar()->showMessage( tr("Done") );
  15. enableActions();
  16. }
  17.  
  18. class ButtonWidget : public QWidget {
  19. Q_OBJECT
  20.  
  21. public:
  22. ButtonWidget(QStringList texts, QWidget *parent = 0);
  23.  
  24. signals:
  25. void clicked(const QString &text);
  26.  
  27. private:
  28. QSignalMapper *signalMapper;
  29. };
  30.  
  31. ButtonWidget::ButtonWidget(QStringList texts, QWidget *parent)
  32. : QWidget(parent)
  33. {
  34. signalMapper = new QSignalMapper(this);
  35.  
  36. QGridLayout *gridLayout = new QGridLayout;
  37. for (int i = 0; i < texts.size(); ++i) {
  38. QPushButton *button = new QPushButton(texts[i]);
  39. connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
  40. signalMapper->setMapping(button, texts[i]);
  41. gridLayout->addWidget(button, i / 3, i % 3);
  42. }
  43.  
  44. connect(signalMapper, SIGNAL(mapped(const QString &)),
  45. this, SIGNAL(clicked(const QString &)));
  46.  
  47. setLayout(gridLayout);
  48. }
  49.  
  50. connect(signalMapper, SIGNAL(mapped(const QString &)),
  51. this, SIGNAL(clicked(const QString &)));
  52.  
  53. TestClass::TestClass() {
  54. widget = new ButtonWidget(QStringList() << "Foo" << "Bar");
  55. connect(widget, SIGNAL(clicked(const QString &)),
  56. this, SLOT(onButtonClicked(const QString &)));
  57. }
  58.  
  59. void TestClass::onButtonClicked(const QString &btnText) {
  60. if (btnText == "Foo") {
  61. // Do stuff.
  62. }
  63. else {
  64. // Or something else.
  65. }
  66. }
  67.  
  68. mySignalMapper:
  69. [ obj1 -> 42 ]
  70. [ obj2 -> "obiwan" ]
  71. [ obj3 -> myWidget ]
  72.  
  73. connect(obj1,mySignal,mySignalMapper,SLOT(map())); // idem for obj2 and obj3
  74.  
  75. (obj2 emits "mySignal")
  76. -> (mySignalMapper::map slot is called)
  77. -> (sender() == obj2, associated data = "obiwan")
  78. -> (mySignalMapper emits mapped("obiwan"))
Add Comment
Please, Sign In to add comment