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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: вопрос по дочернему окну  (Прочитано 16651 раз)
muaddib1981@mail.ru
Гость
« : Ноябрь 25, 2008, 11:46 »


Как скрыть заголовок дочернего окна?

Записан
Hort
Гость
« Ответ #1 : Ноябрь 25, 2008, 11:53 »

Как скрыть заголовок дочернего окна?
например так
Код
C++ (Qt)
setWindowFlags(Qt::Popup);
Записан
muaddib1981@mail.ru
Гость
« Ответ #2 : Ноябрь 25, 2008, 12:09 »

Не получается:

Код
C++ (Qt)
class THelpDialog:public QWidget
{
public:
THelpDialog(int sizex, int sizey);
~THelpDialog(void);
       ...
};
 
 
THelpDialog::THelpDialog(int sizex, int sizey)
{
   this->setWindowFlags(Qt::Popup);
   ...
};
 
class TPlayWindow:public QMainWindow
{
public:
TPlayWindow(int sizex, int sizey);
~TPlayWindow(void);
private:
QMdiArea *mdiarea;
};
 
TPlayWindow::TPlayWindow(int sizex, int sizey)
{
this->setFixedWidth(sizex);
this->setFixedHeight(sizey);
 
       mdiarea=new QMdiArea();
this->setCentralWidget(mdiarea);
 
THelpDialog *helpdialog=new THelpDialog(0.8*this->width(),1.0/26*this->height());
mdiarea->addSubWindow(helpdialog,Qt::Popup);
 
}

Причем если окно не дочернее, а виджет который прикрепляется на layout, то все работает, если окно дочернее появляется заголовок.
« Последнее редактирование: Ноябрь 25, 2008, 12:41 от pastor » Записан
Hort
Гость
« Ответ #3 : Ноябрь 25, 2008, 12:16 »

работать с окнами QMdiArea надо через класс QMdiSubWindow
метод addSubWindow() возвращает указатель на созданный QMdiSubWindow
следовательно в твоем случае надо так:
Код
C++ (Qt)
mdiarea->addSubWindow(helpdialog,Qt::Popup)->setWindowFlags(Qt::Popup);
Записан
muaddib1981@mail.ru
Гость
« Ответ #4 : Ноябрь 25, 2008, 12:26 »

Нет все равно, не работает. Может существует какой-нибудь другой способ, в обход setWindowFlags?
Записан
Hort
Гость
« Ответ #5 : Ноябрь 25, 2008, 12:34 »

Нет все равно, не работает. Может существует какой-нибудь другой способ, в обход setWindowFlags?
а чем тебе не подходит обычное всплывающее окно? МидиАреа вообще-то предназначена какбы не совсем для этого
Записан
muaddib1981@mail.ru
Гость
« Ответ #6 : Ноябрь 25, 2008, 12:38 »

мне нужно, чтобы в окне были виджеты без заголовков. Перетаскивать мышью я их собираюсь ухватываясь не за заголовок а за сам виджет. Но чтобы виджеты не попадали за пределы окна. Т.е. мне нужно:
1) виджеты без заголовков
2) запретить возможность перетаскивания за пределы окна.
Записан
Hort
Гость
« Ответ #7 : Ноябрь 25, 2008, 12:47 »

поробовалы только что у себя подобное
Код:
mdiarea->addSubWindow(helpdialog,Qt::Popup)->setWindowFlags(Qt::Popup);
действительно ведет себя очень странно.

Есть еще один вариант - поробуй сделать это через QWorkspace
Бывает такое, что то что глючит на QMidiArea нормально работает в QWorkspace и наоборот.
В своем проекте не буду проверять - прийдется сильно много переделывать.
Записан
BRE
Гость
« Ответ #8 : Ноябрь 25, 2008, 12:56 »

Бывает такое, что то что глючит на QMidiArea нормально работает в QWorkspace и наоборот.
В своем проекте не буду проверять - прийдется сильно много переделывать.

Цитата из QAssistant по классу QWorkspace:
Цитировать
This class is deprecated. Use QMdiArea instead.
QWorkspace могут убрать из Qt в любой момент.
Записан
muaddib1981@mail.ru
Гость
« Ответ #9 : Ноябрь 25, 2008, 13:01 »

Код
C++ (Qt)
class TPlayWindow:public QMainWindow
{
public:
TPlayWindow(int sizex, int sizey);
~TPlayWindow(void);
private:
QWorkspace *workspace;
};
 
TPlayWindow::TPlayWindow(int sizex, int sizey)
{
this->setFixedWidth(sizex);
this->setFixedHeight(sizey);
 
       workspace=new QWorkspace();
this->setCentralWidget(workspace);
 
THelpDialog *helpdialog=new THelpDialog(0.8*this->width(),1.0/26*this->height());
workspace->addWindow(helpdialog,Qt::Popup)->setWindowFlags(Qt::Popup);
 
}

//Пользуйся тэгом КОД для оформления исходного кода!
« Последнее редактирование: Ноябрь 25, 2008, 14:36 от pastor » Записан
muaddib1981@mail.ru
Гость
« Ответ #10 : Ноябрь 25, 2008, 13:03 »

Глючит, все равно. Окно просто не появляется. Если просто workspace->addWindow(helpdialog); то появляется, но с заголовком!
Записан
spirit
Гость
« Ответ #11 : Ноябрь 25, 2008, 13:15 »

Код
C++ (Qt)
QWorkspace *workspace = new QWorkspace;
workspace->addWindow(new QWidget, Qt::Widget | Qt::CustomizeWindowHint);
setCentralWidget(workspace);
 
enjoy!
« Последнее редактирование: Ноябрь 25, 2008, 13:25 от spirit » Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #12 : Ноябрь 25, 2008, 14:57 »

По моему, надо еще Qt::FramelessWindowHint добавить:

Код:
workspace->addWindow(new QWidget, Qt::Widget | Qt::CustomizeWindowHint | Qt::FramelessWindowHint);

Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
spirit
Гость
« Ответ #13 : Ноябрь 25, 2008, 14:59 »

По моему, надо еще Qt::FramelessWindowHint добавить:

Код:
workspace->addWindow(new QWidget, Qt::Widget | Qt::CustomizeWindowHint | Qt::FramelessWindowHint);


и без этого работает чудесно.
Записан
spirit
Гость
« Ответ #14 : Ноябрь 25, 2008, 16:03 »

ага, нельзя будет ресайзить виджет  Улыбающийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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