Results 1 to 5 of 5

Thread: contextmenu in QDockWidget title

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #3
    Join Date
    Oct 2007
    Posts
    5
    Thanks
    2
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: contextmenu in QDockWidget title

    He is some code:

    - MyDockWidget.h

    Qt Code:
    1. #ifndef MYDOCKWIDGET_H
    2. #define MYDOCKWIDGET_H
    3.  
    4. #include <QDockWidget>
    5. class QMenu;
    6. class QAction;
    7.  
    8. class MainWindow;
    9.  
    10. class MyDockWidget: public QDockWidget
    11. {
    12. Q_OBJECT;
    13.  
    14. public:
    15. MyDockWidget(MainWindow * mainWindow, std::string const & title);
    16. virtual ~MyDockWidget(void);
    17.  
    18. private:
    19. void contextMenuEvent(QContextMenuEvent *e);
    20.  
    21. private slots:
    22. void onFloat();
    23. void onDock();
    24.  
    25. private:
    26. QMenu *m_actionMenu;
    27.  
    28. QAction *m_actionFloat;
    29. QAction *m_actionDock;
    30. };
    31.  
    32. #endif
    To copy to clipboard, switch view to plain text mode 

    -- MyDockWidget.cpp

    Qt Code:
    1. #include "MyDockWidget.h"
    2. #include "MainWindow.h"
    3.  
    4. #include <QSettings>
    5. #include <QContextMenuEvent>
    6. #include <QMenu>
    7. #include <QAction>
    8.  
    9.  
    10. MyDockWidget::MyDockWidget(MainWindow * mainWindow, std::string const & title)
    11. : QDockWidget(title.c_str(), mainWindow, 0)
    12. {
    13. std::string group = "gui/dock/";
    14. group += windowTitle().toStdString();
    15.  
    16. setObjectName(windowTitle() + "_view");
    17.  
    18. m_actionMenu = new QMenu();
    19.  
    20. m_actionFloat = new QAction(tr("Floating"), mainWindow);
    21. m_actionFloat->setCheckable(true);
    22. connect(m_actionFloat, SIGNAL(triggered()), this, SLOT(onFloat()));
    23. m_actionMenu->addAction(m_actionFloat);
    24.  
    25. m_actionDock = new QAction(tr("Dock"), mainWindow);
    26. m_actionDock->setCheckable(true);
    27. connect(m_actionDock, SIGNAL(triggered()), this, SLOT(onDock()));
    28. m_actionMenu->addAction(m_actionDock);
    29. }
    30.  
    31. MyDockWidget::~MyDockWidget(void)
    32. {
    33. }
    34.  
    35. void MyDockWidget::contextMenuEvent(QContextMenuEvent *e)
    36. {
    37. m_actionMenu->exec(e->globalPos());
    38. }
    39.  
    40. void MyDockWidget::onFloat()
    41. {
    42. setFloating(true);
    43. setAllowedAreas(Qt::NoDockWidgetArea);
    44. m_actionFloat->setChecked(true);
    45. m_actionDock->setChecked(false);
    46. }
    47.  
    48. void MyDockWidget::onDock()
    49. {
    50. setAllowedAreas(Qt::AllDockWidgetAreas);
    51. m_actionFloat->setChecked(false);
    52. m_actionDock->setChecked(true);
    53. }
    To copy to clipboard, switch view to plain text mode 
    All DockWidgets in the application inherit from MyDockWidget.

    coderbob - You mention that when the dock is floating it will lose the contextMenuEvent from the parent. Does this mean I'll need to put in a contextMenuEvent in each class the inherits from MyDockWidget?
    Last edited by jpn; 4th March 2008 at 19:29. Reason: missing [code] tags

Similar Threads

  1. No restore button in QDockWidget title bar
    By trskel in forum Qt Programming
    Replies: 1
    Last Post: 21st September 2007, 09:59

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Qt is a trademark of The Qt Company.