Russian Qt Forum

Qt => Вопросы новичков => Тема начата: shadow от Май 06, 2015, 12:31



Название: QMainwindow + дополнительное окно?
Отправлено: shadow от Май 06, 2015, 12:31
Привет!
Есть у меня приложение QMainWindow в котором я рисую(QGraphicsScene,QGraphicsView) некие элементы (QGraphicsItem)...
Я хочу еще чтобы по двойному клику на элементе открывалось окно (на котором я также хочу рисовать элементы QGraphicsItem).
Так вот как сделать это окно чтобы оно наследовалось от основного приложения (закрывалось при закрытии основного приложения, не выходило за рамки основного окна)?
В примере я попробовал QWidget но это не то что мне надо :(

 


Название: Re: QMainwindow + дополнительное окно?
Отправлено: RovingStone от Май 06, 2015, 13:23
Посмотрите в сторону MDI:
http://doc.qt.io/qt-5/qtwidgets-mainwindows-mdi-example.html
Подходит?


Название: Re: QMainwindow + дополнительное окно?
Отправлено: RovingStone от Май 06, 2015, 14:32
Также можно посмотреть в сторону QDialog. Переопределите класс QDialog и используйте его подобно главному окну. В конструкторе передайте родительский виджет. Окно можно сделать модальным, чтобы быть сверху основного окна. http://doc.qt.io/qt-5/qdialog.html Он закроется вместе с основным окном.
Чтобы окно не выходило за границы родительского - обрабатывать события QMoveEvent. Если использовать EventFilter, то можно игнорировать перемещение окна за пределы родительского. Об этом тут http://doc.qt.io/qt-5/eventsandfilters.html


Название: Re: QMainwindow + дополнительное окно?
Отправлено: shadow от Май 08, 2015, 15:31
Попробовал mdi, вроде то но столкнулся с проблемой как добавить из класа node новое окно:
Код:
mdiArea->addSubWindow(child)
? Ведь mdiArea опеделен в класе DiagramWindow.
Или как переопределить(перехватить) событие двойного нажатия  на елементе node
Код:
void Node::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
и обрабатывать его в классе DiagramWindow?


Название: Re: QMainwindow + дополнительное окно?
Отправлено: gil9red от Май 08, 2015, 15:56
Или как переопределить(перехватить) событие двойного нажатия  на елементе node
Код:
void Node::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
и обрабатывать его в классе DiagramWindow?

Воспользоваться eventFilter :)


Название: Re: QMainwindow + дополнительное окно?
Отправлено: Igors от Май 08, 2015, 16:19
Воспользоваться eventFilter :)
Согласен, MDI = black sheep of the family


Название: Re: QMainwindow + дополнительное окно?
Отправлено: shadow от Май 13, 2015, 16:10
Или как переопределить(перехватить) событие двойного нажатия  на елементе node
Код:
void Node::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
и обрабатывать его в классе DiagramWindow?

Воспользоваться eventFilter :)
Ок
В констуктор добавляю:
Код:
view->viewport()->installEventFilter(this);
Далее
Код:
bool DiagramWindow::eventFilter(QObject *, QEvent *event)
{
    if(event->type() == QEvent::GraphicsSceneMouseDoubleClick ){
    QMessageBox::information(0," ","Press Mouse Button");
    return true;
    }   
    return false;
}
И ничего не происходит... Что не так?