crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Меню.
Гость_nazavrik_*
сообщение 26.5.2010, 15:55
Сообщение #1





Гости








    


Добрый день!

Продолжаю прорисовывать дизайн сапера. Возникла проблема с добавлением меню:



Сначала создаю меню так:

CODE
QMenuBar *menuBar = new QMenuBar( this);

QMenu *FirstMenu = new QMenu( menuBar);
FirstMenu->setTitle( tr( "First"));
FirstMenu->addMenu( "menu");
menuBar->addMenu( FirstMenu);

и т.д.


После этого с помощью QGridLayout группирую кнопки. Но кнопки налезают на меню. Как можно нормально отобразить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.5.2010, 16:05
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Гость_nazavrik_* @ 26.5.2010, 19:55) *
После этого с помощью QGridLayout группирую кнопки.
покажи весь код, того как ты работаешь с QGridLayout
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_nazavrik_*
сообщение 26.5.2010, 16:17
Сообщение #3





Гости








    


Цитата(Litkevich Yuriy @ 26.5.2010, 16:05) *
Цитата(Гость_nazavrik_* @ 26.5.2010, 19:55) *
После этого с помощью QGridLayout группирую кнопки.
покажи весь код, того как ты работаешь с QGridLayout


Вот:

    QGridLayout* layout = new QGridLayout;

     field = new CButton*[ncolumns];

    for(int i=0; i<ncolumns; i++){

        field[i] = new CButton[nrows];

        for(int j=0; j<nrows; j++){

            field[i][j].SetPositionXY(i,j);
            field[i][j].setFixedSize(20,20);
            field[i][j].setCheckable(true);
            connect(&(field[i][j]), SIGNAL(clicked()), this, SLOT(slotButtonClicked()));
            layout->addWidget(&(field[i][j]), j, i);
        }
    }
    layout->setSpacing(0);

    setLayout(layout);
Причина редактирования: используй тэг code вместо codebox, темболее, что кнопочка ближе
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.5.2010, 16:24
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


а основное окно приложения, наследник QMainWindow? А центральный виджет ему не поставил?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_nazavrik_*
сообщение 26.5.2010, 16:56
Сообщение #5





Гости








    


Цитата(Litkevich Yuriy @ 26.5.2010, 16:24) *
а основное окно приложения, наследник QMainWindow? А центральный виджет ему не поставил?


Нет, центральное окно не QMainWindow.

У меня есть отдельно функционал игры и есть отдельно интерфейс. Класс, с помощью которого они соединяются, наследуется от Widget и имеет ссылку на игровое поле. Я так понимаю, что в этом случае QMainWindow как центральное окно никуда приделать не получится.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.5.2010, 17:23
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


у QWidget, нет предопределённого компоновщика для QMenuBar. А у QMainWindow есть специальный, встроенный, компоновщик.
По этому проще поменять базовый класс твоего окна на QMainWindow, добавить экземпляр QWidget в качестве центрального виджета, и уже на нём разместить все дочерние компоновщики/виджеты. Подробности смотри в описании QMainWindow, там приведена схема внутреннего компоновщика. Именно он отвечает, за то где будут размещены определённые виджеты.
Например, добавляя панель меню (QMenuBar), ты не указываешь, где ему находится. Т.к. внутренний компоновщик QMainWindow знает сам куда помещать наследников конкретного класса.


Ещё один вариант - создать вертикальный компоновщик, поместить панель меню в него, а затем поместить в него компоновщик по сетке.
Тогда внешний компоновщик будет управлять размерами и положением панели меню
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MoPDoBoPoT
  опции профиля:
сообщение 26.5.2010, 19:04
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 172
Регистрация: 7.5.2009
Из: Москва
Пользователь №: 738

Спасибо сказали: 44 раз(а)




Репутация:   9  


void QLayout::setMenuBar ( QWidget * widget )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.4.2024, 15:04