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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: модальный QMainWindow и mousePressEvent  (Прочитано 8366 раз)
muaddib1981@mail.ru
Гость
« : Декабрь 17, 2008, 12:50 »

Есть следующий код:

Код:

#include <QtGui>

class TChildWindow:public QMainWindow
{
public:
TChildWindow(void);
~TChildWindow(void);
private:
void virtual mousePressEvent(QMouseEvent *event);
};
//-------------------------------------------------------

#include "TChildWindow.h"

TChildWindow::TChildWindow(void)
{
setStyleSheet("background-color: gray");
}

TChildWindow::~TChildWindow(void)
{
}

void TChildWindow::mousePressEvent(QMouseEvent *event)
{
   this->close();
};

//----------------------------------------

#include <QtGui>
#include "TChildWindow.h"

class TMainWindow:public QMainWindow
{
Q_OBJECT
public:
TMainWindow(void);
~TMainWindow(void);
private:
    TChildWindow *childwindow;
QWidget *mainWidget;
QGridLayout *layout;
QPushButton *button;
public slots:
    void slotPushButton(void);
};

//---------------------------

#include "TMainWindow.h"

TMainWindow::TMainWindow(void)
{

mainWidget=new QWidget();
    layout=new QGridLayout();
mainWidget->setLayout(layout);
this->setCentralWidget(mainWidget);

button=new QPushButton("OK");
layout->addWidget(button);

childwindow=new TChildWindow();
connect(button,SIGNAL(clicked()),this,SLOT(slotPushButton()));
}

TMainWindow::~TMainWindow(void)
{
}

void TMainWindow::slotPushButton(void)
{
childwindow->setParent(this);
childwindow->setFixedWidth(this->width()/2);
childwindow->setFixedHeight(this->height()/2);
childwindow->move(20,20);
    childwindow->setWindowModality(Qt::WindowModal);
childwindow->show();
};

//---------------------------------------

int main (int argc, char* argv[] )
{
QApplication app(argc, argv);
       TMainWindow *window=new TMainWindow();
window->show();
return app.exec();
delete window;
}


MousePressEvent не вызывается если дочернее окно модальное:  childwindow->setWindowModality(Qt::WindowModal);   

Записан
spirit
Гость
« Ответ #1 : Декабрь 17, 2008, 12:54 »

это сильно  Подмигивающий
Код:
...
return app.exec();
delete window;
...
Записан
muaddib1981@mail.ru
Гость
« Ответ #2 : Декабрь 17, 2008, 12:55 »

Да невнимательно писал, сорри.
Записан
spirit
Гость
« Ответ #3 : Декабрь 17, 2008, 13:12 »

добавь парента в TChildWindow и будет работать.
Записан
muaddib1981@mail.ru
Гость
« Ответ #4 : Декабрь 17, 2008, 13:15 »

Это как? Я вроде делаю: childwindow->setParent(this);
Записан
spirit
Гость
« Ответ #5 : Декабрь 17, 2008, 13:18 »

Код
C++ (Qt)
TChildWindow::TChildWindow(QWidget *parent)
: QMainWindow(parent)
{
setStyleSheet("background-color: gray");
}
...
childwindow=new TChildWindow(this);
...
 
Записан
muaddib1981@mail.ru
Гость
« Ответ #6 : Декабрь 17, 2008, 13:26 »

не работает, вернее работает, но не как надо. childwindow с этим кодом можно передвигать за пределы родительского окна, а мне надо чтобы TMainWindow нельзя было.
Записан
spirit
Гость
« Ответ #7 : Декабрь 17, 2008, 13:28 »

а почему QDialog нельзя использовать?
Записан
muaddib1981@mail.ru
Гость
« Ответ #8 : Декабрь 17, 2008, 14:02 »

Надо попробовать.
Записан
muaddib1981@mail.ru
Гость
« Ответ #9 : Декабрь 17, 2008, 14:07 »

Точно также, если не добавлять parent, то mousePressEvent не вызывается, а если добавить, то дочернее окно выходит за пределы родительского окна.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #10 : Декабрь 17, 2008, 14:49 »

А какое поведение нужно получить в итоге? Может лучше посомтреть в сторону QMdiArea + QMdiSubWindow?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
muaddib1981@mail.ru
Гость
« Ответ #11 : Декабрь 17, 2008, 15:00 »

Мне нужно:

1) дочернее окно окно должно быть модальным
2) дочернее окно должно быть без title bar (как раз получается при помощи setParent, при QMdiArea и QMdiSubWindow такое получить не удается)
3) дочернее окно не должно выходить за пределы родительского окна (опять же setParent, меня устраивал но на модальных дочерних окнах не вызывается mousePressEvent).

Записан
spirit
Гость
« Ответ #12 : Декабрь 17, 2008, 15:08 »

и это дочернее окно должно двигаться внутри парента?
Записан
muaddib1981@mail.ru
Гость
« Ответ #13 : Декабрь 17, 2008, 15:18 »

Совершенно верно!
Записан
spirit
Гость
« Ответ #14 : Декабрь 17, 2008, 15:21 »

ну если QWorspace || QMdiArea не подходит, тогда можно создать виджет указав паренто, но убрать тайтл, следить чтобы этот виджет не выходил за размеры парента + самому реализовать перетаскивание за любую область виджета.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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