Russian Qt Forum
Июля 02, 2025, 09:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: модальный QMainWindow и mousePressEvent  (Прочитано 8744 раз)
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   Вверх
  Печать  
 
Перейти в:  


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