правой кнопкой мыши вызываю контекстное меню на QTreeView. После этого выбираю QAction и вызываю диалог.
После закрытия диалога появляется меню главного окна. Почему ?
Это глюк, или я что-то не так делаю ?
#include <QtGui/QApplication>
#include <QAbstractListModel>
#include <QMainWindow>
#include <QGridLayout>
#include <QTreeView>
#include <QToolBar>
#include <QStatusBar>
#include <QMouseEvent>
#include <QDialog>
#include <QMenu>
class ListModel : public QAbstractListModel {
private:
virtual int rowCount(const QModelIndex& index) const
{
return 0;
}
virtual int columnCount(const QModelIndex& parent = QModelIndex()) const
{
return 0;
}
virtual QVariant data(const QModelIndex& index, int role) const
{
return QVariant();
}
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const
{
return QVariant();
}
public :
explicit ListModel(QObject* parent) : QAbstractListModel(parent)
{
}
virtual ~ListModel() {}
};
class ListWidget : public QTreeView {
private:
struct QActiveMenu : public QMenu
{
explicit QActiveMenu (QWidget* parent)
{
QAction* action = this->addAction("Action");
action->setData(0);
}
virtual ~QActiveMenu () {}
};
virtual void mouseReleaseEvent (QMouseEvent* event)
{
switch (event->button()) {
case Qt::LeftButton : break;
case Qt::RightButton:
{
QActiveMenu menu (this);
QAction* action = menu.exec(event->globalPos());
if (!action) break;
QDialog dialog(this);
dialog.setMinimumSize(400, 300);
dialog.setMaximumSize(400, 300);
if (dialog.exec() == QDialog::Accepted)
{
}
break;
}
}
QTreeView::mouseReleaseEvent(event);
}
public :
explicit ListWidget(QWidget* parent) : QTreeView(parent)
{
this->setModel(new ListModel(this));
}
virtual ~ListWidget() {}
};
class MainWindow : public QMainWindow{
private:
public :
explicit MainWindow(QWidget* parent = 0) : QMainWindow(parent)
{
QToolBar* toolbar = new QToolBar("ToolBar", this);
this->addToolBar(Qt::TopToolBarArea, toolbar);
QWidget* widget = new QWidget(this);
setCentralWidget(widget);
QGridLayout* gridLayout = new QGridLayout(widget);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(3, 3, 3, 3);
ListWidget* lw = new ListWidget(widget);
gridLayout->addWidget(lw, 0, 0, 1, 1);
}
virtual ~MainWindow() {}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow form;
form.setMinimumSize(400, 300);
form.show();
return app.exec();
}