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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сокрытие заголовка окна.  (Прочитано 5346 раз)
andi
Гость
« : Февраль 15, 2007, 10:14 »

Есть проблема (Qt3.3.6)
Программа состоит из нескольких окон (одно главное и из него вызваются 3 дополнительных). Все окна нарисованы в дезигнере, потом я от них наследуюсь и втыкаю свой функционал.
В дезигнере все окна наследуются от QDialog
Есть потребность в том чтобы лишить все окна заголовка.
Пробовал передавать в конструкторы форм следующие флаги:
Qt::WStyle_Customize|Qt::WStyle_NoBorder
, но эффект не последовал.
Каким образом решить проблему?

Исходный код:

Код:

class MainForm : public Form1
{
Q_OBJECT
public:
MainForm( Form1* parent = 0, const char* name = 0, WFlags fl = 0  );
.....
}

MainForm::MainForm( Form1* parent, const char* name, WFlags fl )
    : Form1( parent, name, fl )
{
.....
}

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainForm *form = new MainForm(0,0,Qt::WStyle_Customize|Qt::WStyle_NoBorder);
app.setMainWidget(form);
form->show();
int res = app.exec();
delete form;
return res;
}

Записан
mcgeenerman
Гость
« Ответ #1 : Февраль 17, 2007, 03:49 »

бордер это не заголовок попробуй поюзать так:
MainForm(0,0,Qt::Popup);
Записан
andi
Гость
« Ответ #2 : Февраль 19, 2007, 08:12 »

Судя по всему имелся ввиду флаг:

Qt::WType_Popup

Не сработало. Причем еще добавился ненужный эффект, при закрытии окна оно полностью уничтожается, что мне не нужно.

Я тут в выходные во всю играл с примером на ту тему (qt/examples/toplevel)
Пришел к странному выводу, что в общем случае, флаги начинают действовать только после повторной их установки.
Например, создаем диалог и передаем ему флаги. Потом вызываем
reparent для него и вот после этого, внешний вид меняется.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Февраль 19, 2007, 13:36 »

У меня в XP всё работает:

Код:

#include <qapplication.h>
#include <qwidget.h>
#include <qdialog.h>

#include <stdio.h>

class M : public QWidget
{
    public:
        M() : QWidget()
        {
            QDialog *d = new QDialog(this, "dialog", true, WStyle_Customize | Qt::WStyle_NoBorder);
            d->setCaption("Dialog");
            d->exec();
        }

        ~M()
        {}
};

int main( int argc, char **argv )
{
    QApplication a( argc, argv );

    M *m = new M;

    a.setMainWidget(m);

    m->show();

    int result = a.exec();

    delete m;

    return result;
}



Диалог появляется без рамки.

Кстати, ээээ, у тебя в конструкторе MainForm() 3 параметра, а не 4. A QDialog() принимает 4 параметра.
Записан
andi
Гость
« Ответ #4 : Февраль 21, 2007, 06:05 »

Похоже в этом 4 параметре и было дело.
Вобщем, ui-компиллер создает вот такой конструктор для диалогов созданных в дезигнере:
  Form1( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
А когда начал свое городить по образу и подобию Бланшета, оказалось что они таким образом вызывают конструктор виджета, а у меня был диалог.
Вобщем добавил, я туда true, и все получилось.
Спасибо всем кто откликнулся.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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