He is some code:
- MyDockWidget.h
#ifndef MYDOCKWIDGET_H
#define MYDOCKWIDGET_H
#include <QDockWidget>
class MainWindow;
{
Q_OBJECT;
public:
MyDockWidget(MainWindow * mainWindow, std::string const & title);
virtual ~MyDockWidget(void);
private:
private slots:
void onFloat();
void onDock();
private:
};
#endif
#ifndef MYDOCKWIDGET_H
#define MYDOCKWIDGET_H
#include <QDockWidget>
class QMenu;
class QAction;
class MainWindow;
class MyDockWidget: public QDockWidget
{
Q_OBJECT;
public:
MyDockWidget(MainWindow * mainWindow, std::string const & title);
virtual ~MyDockWidget(void);
private:
void contextMenuEvent(QContextMenuEvent *e);
private slots:
void onFloat();
void onDock();
private:
QMenu *m_actionMenu;
QAction *m_actionFloat;
QAction *m_actionDock;
};
#endif
To copy to clipboard, switch view to plain text mode
-- MyDockWidget.cpp
#include "MyDockWidget.h"
#include "MainWindow.h"
#include <QSettings>
#include <QContextMenuEvent>
#include <QMenu>
#include <QAction>
MyDockWidget::MyDockWidget(MainWindow * mainWindow, std::string const & title)
{
std::string group = "gui/dock/";
group += windowTitle().toStdString();
setObjectName(windowTitle() + "_view");
m_actionMenu
= new QMenu();
m_actionFloat
= new QAction(tr
("Floating"), mainWindow
);
m_actionFloat->setCheckable(true);
connect(m_actionFloat, SIGNAL(triggered()), this, SLOT(onFloat()));
m_actionMenu->addAction(m_actionFloat);
m_actionDock
= new QAction(tr
("Dock"), mainWindow
);
m_actionDock->setCheckable(true);
connect(m_actionDock, SIGNAL(triggered()), this, SLOT(onDock()));
m_actionMenu->addAction(m_actionDock);
}
MyDockWidget::~MyDockWidget(void)
{
}
{
m_actionMenu->exec(e->globalPos());
}
void MyDockWidget::onFloat()
{
setFloating(true);
setAllowedAreas(Qt::NoDockWidgetArea);
m_actionFloat->setChecked(true);
m_actionDock->setChecked(false);
}
void MyDockWidget::onDock()
{
setAllowedAreas(Qt::AllDockWidgetAreas);
m_actionFloat->setChecked(false);
m_actionDock->setChecked(true);
}
#include "MyDockWidget.h"
#include "MainWindow.h"
#include <QSettings>
#include <QContextMenuEvent>
#include <QMenu>
#include <QAction>
MyDockWidget::MyDockWidget(MainWindow * mainWindow, std::string const & title)
: QDockWidget(title.c_str(), mainWindow, 0)
{
std::string group = "gui/dock/";
group += windowTitle().toStdString();
setObjectName(windowTitle() + "_view");
m_actionMenu = new QMenu();
m_actionFloat = new QAction(tr("Floating"), mainWindow);
m_actionFloat->setCheckable(true);
connect(m_actionFloat, SIGNAL(triggered()), this, SLOT(onFloat()));
m_actionMenu->addAction(m_actionFloat);
m_actionDock = new QAction(tr("Dock"), mainWindow);
m_actionDock->setCheckable(true);
connect(m_actionDock, SIGNAL(triggered()), this, SLOT(onDock()));
m_actionMenu->addAction(m_actionDock);
}
MyDockWidget::~MyDockWidget(void)
{
}
void MyDockWidget::contextMenuEvent(QContextMenuEvent *e)
{
m_actionMenu->exec(e->globalPos());
}
void MyDockWidget::onFloat()
{
setFloating(true);
setAllowedAreas(Qt::NoDockWidgetArea);
m_actionFloat->setChecked(true);
m_actionDock->setChecked(false);
}
void MyDockWidget::onDock()
{
setAllowedAreas(Qt::AllDockWidgetAreas);
m_actionFloat->setChecked(false);
m_actionDock->setChecked(true);
}
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?
Bookmarks