Russian Qt Forum
Ноябрь 25, 2024, 14:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QMainwindow + дополнительное окно?  (Прочитано 4374 раз)
shadow
Гость
« : Май 06, 2015, 12:31 »

Привет!
Есть у меня приложение QMainWindow в котором я рисую(QGraphicsScene,QGraphicsView) некие элементы (QGraphicsItem)...
Я хочу еще чтобы по двойному клику на элементе открывалось окно (на котором я также хочу рисовать элементы QGraphicsItem).
Так вот как сделать это окно чтобы оно наследовалось от основного приложения (закрывалось при закрытии основного приложения, не выходило за рамки основного окна)?
В примере я попробовал QWidget но это не то что мне надо Грустный

 
Записан
RovingStone
Гость
« Ответ #1 : Май 06, 2015, 13:23 »

Посмотрите в сторону MDI:
http://doc.qt.io/qt-5/qtwidgets-mainwindows-mdi-example.html
Подходит?
Записан
RovingStone
Гость
« Ответ #2 : Май 06, 2015, 14:32 »

Также можно посмотреть в сторону QDialog. Переопределите класс QDialog и используйте его подобно главному окну. В конструкторе передайте родительский виджет. Окно можно сделать модальным, чтобы быть сверху основного окна. http://doc.qt.io/qt-5/qdialog.html Он закроется вместе с основным окном.
Чтобы окно не выходило за границы родительского - обрабатывать события QMoveEvent. Если использовать EventFilter, то можно игнорировать перемещение окна за пределы родительского. Об этом тут http://doc.qt.io/qt-5/eventsandfilters.html
Записан
shadow
Гость
« Ответ #3 : Май 08, 2015, 15:31 »

Попробовал mdi, вроде то но столкнулся с проблемой как добавить из класа node новое окно:
Код:
mdiArea->addSubWindow(child)
? Ведь mdiArea опеделен в класе DiagramWindow.
Или как переопределить(перехватить) событие двойного нажатия  на елементе node
Код:
void Node::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
и обрабатывать его в классе DiagramWindow?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Май 08, 2015, 15:56 »

Или как переопределить(перехватить) событие двойного нажатия  на елементе node
Код:
void Node::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
и обрабатывать его в классе DiagramWindow?

Воспользоваться eventFilter Улыбающийся
Записан

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Май 08, 2015, 16:19 »

Воспользоваться eventFilter Улыбающийся
Согласен, MDI = black sheep of the family
Записан
shadow
Гость
« Ответ #6 : Май 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;
}
И ничего не происходит... Что не так?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 23.