правой кнопкой мыши вызываю контекстное меню на 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(); }
|
|