Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: crackedmind от Июль 08, 2009, 18:10



Название: QGLWidget и меню
Отправлено: crackedmind от Июль 08, 2009, 18:10
Вообщем есть родительский QWidget. В нем дочерний QGLWidget, в котором рисуется сцена. Хочу добавить главное меню. Но вот тут появилась проблема.
Если я добавляю еще дочерний QMenuBar, то он отрисовывается под QGLWidget'ом. Т.к. получается, что у них одинаковые координаты (Я их оставил по дефолту). Как бы это можно побороть? не двигая глвиджет...


Название: Re: QGLWidget и меню
Отправлено: f-r-o-s-t от Июль 08, 2009, 18:14
А в QMainWindow что мешает все это поместить ?


Название: Re: QGLWidget и меню
Отправлено: break от Июль 08, 2009, 18:32
Да правильно в QMainWindow надо и в setCentralWidget - засунуть QGLWidget и все ок будет.


Название: Re: QGLWidget и меню
Отправлено: crackedmind от Июль 09, 2009, 01:43
Действительно. Забыл про QMainWindow :)


Название: Re: QGLWidget и меню
Отправлено: crackedmind от Июль 09, 2009, 15:25
Теперь другая проблема. Есть меню. Сделал GLWidget центральным, но теперь, если отображается меню, то сцена обрезается снизу на 19 пикселей (как раз высота меню). Как бы это безобразие побороть? Т.е. нужно как то правильно ресайзить окошко.

Точнее проблема в том, что menuBar()->height() - возвращает 30, а не 19.

p.s. хотя такое ощущение, что я где-то что забыл и пропустил :)


Название: Re: QGLWidget и меню
Отправлено: f-r-o-s-t от Июль 09, 2009, 16:29
Не понял ничего =(
Если ты делаешь виджет центральным, добавляешь меню(статус бары, тулбары), то все что связанно с ресайзом на себя
берет QMainWindow, ты там часом вручную ничего не позиционируешь, может скинешь код ?


Название: Re: QGLWidget и меню
Отправлено: crackedmind от Июль 09, 2009, 17:01
Ладно попробую еще раз объяснить :)

Код можно найти по ссылке в подписи. Но там пока отсутсвует код с меню.

Это примерно так выглдит.
Код:
myMainWindow::myMainWindow() : QMainWindow(0)
{
   QGLWidget * w = new QGLWidget(this);
   setCentralWidget(w);
   resize(800, 576); // 576 для того чтоб влезало 18 тайлов по 32 пикселя.
}

теперь после добавления меню, 18 тайлов не влезают в отрисовку. Т.е. мне надо ресайз делать 576 + высота menuBar'a. Но menuBar()->height() - возвращает 30 пикселей. А y() centralWidget'a = 19. Как получить это волшебное число 19? :)


Название: Re: QGLWidget и меню
Отправлено: f-r-o-s-t от Июль 09, 2009, 17:09
Задай размеры QGLWidget и затем сделай его центральным, а если тебе так надо отображать тайлы ровно, так и сделай размеры фиксированными =)


Название: Re: QGLWidget и меню
Отправлено: crackedmind от Июль 09, 2009, 17:15
Ну он и так центральный. Размеры фиксированы. При ресайзе центрального виджета, размеры самого MainWindow не меняются.


p.s. Хотя кажись нашел. Нужно использовать функцию menuBar()->sizeHint() вместо menuBar()->height()


Название: Re: QGLWidget и меню
Отправлено: f-r-o-s-t от Июль 09, 2009, 17:17
Ну он и так центральный. Размеры фиксированы. При ресайзе центрального виджета, размеры самого MainWindow не меняются.


p.s. Хотя кажись нашел. Нужно использовать функцию menuBar()->sizeHint() вместо menuBar()->height()

Я имел ввиду сначала задать ему фиксированные размеры, а затем сделать центральным и тогда Главное окно под него бы
подогналось. Ну хорошо что сам нашел способ =)