crossplatform.ru

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

JuryS1806
  опции профиля:
сообщение 28.1.2010, 20:43
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

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




Репутация:   0  


Всем доброго времени суток. Есть вопрос, как можно меню из главного окна добавить на панель инструментов, при этом чтобы подменю раскрывались не рядом, а ниже.
Интересно поэкспериментировать. А может кто уже делал подобно ? Или все меню перевести в QToolButtons'ы и их кликать.

Еще приложил снимок того как хотелось бы сделать.
Эскизы прикрепленных изображений
 Р В Р’ Р’ Р’ Р’ Р’ Р’˜Р В·Р С•бражение уменьшено
Прикрепленное изображение
186 x 720 (132 килобайт)
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V   1 2 >  
Начать новую тему
Ответов (1 - 16)
Litkevich Yuriy
  опции профиля:
сообщение 28.1.2010, 20:47
Сообщение #2


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

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

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




Репутация:   94  


по моему то, что на картинке - QMenuBar воткнутый внутрь QDocWidget
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JuryS1806
  опции профиля:
сообщение 28.1.2010, 22:22
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 28.1.2010, 20:47) *
по моему то, что на картинке - QMenuBar воткнутый внутрь QDocWidget

Приветствую, Юрий.

Сделал так:
QMenuBar *myMenu = new QMenuBar;
myMenu->addMenu(StFunctions);

QDockWidget *myAddMenu= new QDockWidget;
myAddMenu->setWidget(myMenu);

MebPanel = addToolBar( trUtf8( "Вспомогательная панель" ) );
MebPanel->setObjectName("HelperPan");
MebPanel->addWidget(myAddMenu);


Теперь появилось меню, !НО оно ничем не отличается от того, которое находится сверху, нужно каждый раз искать в нем необходимый элемент. А меню, которое я хочу создать очень удобное, потому что его не нужно каждый раз раскрывать и искать нужное. Оно как бы остается открытым постоянно.

Сообщение отредактировал JuryS1806 - 28.1.2010, 22:45
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MoPDoBoPoT
  опции профиля:
сообщение 28.1.2010, 23:14
Сообщение #4


Участник
**

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

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




Репутация:   9  


Цитата(Litkevich Yuriy @ 28.1.2010, 20:47) *
по моему то, что на картинке - QMenuBar воткнутый внутрь QDocWidget

Еще это похоже на отрывное меню (menu->setTearOffEnabled(true)).
Цитата(JuryS1806 @ 28.1.2010, 20:43) *
чтобы подменю раскрывались не рядом, а ниже

По-моему я вразумил :) Только как потом убирать его при ненадобности (в смысле как это преподнесено для пользователя)?
А вообще, это делается легко. Надо отнаследовать от QMenu и добавить метод что-то вроде addActionsOfMenu(QMenu *menu), в котором в конец нашего меню добавляется разделитель и все действия(экшены) переданного меню. Ну и подобную функцию для удаления действий из меню. Чтобы не заморачиваться с поиском "лишнего" разделителя при удалении, в конструкторе надо установитьсвойство setSeparatorsCollapsible(true).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.1.2010, 23:17
Сообщение #5


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

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

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




Репутация:   94  


Цитата(JuryS1806 @ 29.1.2010, 1:22) *
НО оно ничем не отличается от того, которое находится сверху
Приведи скрин в котором меню (из твоего первого примера) не раскрыто
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JuryS1806
  опции профиля:
сообщение 28.1.2010, 23:43
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

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




Репутация:   0  


Так вот, задача в том, чтобы например пользователь мог выбрать:

Стандартные функции->Создать->Линии->Притивы->Прямоугольник.

И это меню останется распахнутым до конца сенса. И уже в следующий раз не нужно будет лезть неизвестно куда. При проектировании это экономит уйму времени. Я кстати уже к апрелю готовлюсь к патенту на свою программу.
Думаю что было бы разумно также в программе указать на http://www.forum.crossplatform.ru как на источник для разработки.

Будет указана литература, консультанты по геометрии и если это может быть полезным для форума, то и он соответственно.
Спасибо за помощь. Скрин свернутый прикрепил.

Думаю это больше похоже на QTreeView

Только вот при добавлении акшонов из меню:
for (int i=0;i<StFunctions->actions().size();++i)
{
    theItem[i] = new QToolButton(this);
    theItem[i]->setText(StFunctions->actions().at(i)->text());
    MebPanel->addWidget(theItem[i]);
}


он добавляет также и подменю и при нажатии их они просто раскрываются рядом ну и соответственно исчезают при потере курсора мыши.
Вообщем, жду помощи.

Если только к этому подменю не приделать setData и при добавлении узнавать, что это такое, подменю или уже акшон. Задача решаема вообщем-то только может быть есть более простые решения.
Эскизы прикрепленных изображений
 Р В Р’ Р’ Р’ Р’ Р’ Р’˜Р В·Р С•бражение уменьшено
Прикрепленное изображение
186 x 720 (132.51 килобайт)
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.1.2010, 1:18
Сообщение #7


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

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

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




Репутация:   94  


Цитата(JuryS1806 @ 29.1.2010, 2:43) *
И это меню останется распахнутым до конца сенса. И уже в следующий раз не нужно будет лезть неизвестно куда. При проектировании это экономит уйму времени.
идея понятна (в том числе благодаря двум скринам). Мне кажется, что её реализация займёт больше времени, чем идея увиденная мною в SolidWorks (какой-то там версии).

Где-то на форуме я её уже описывал, но чтобы не искать вот скрины:
Нажата одна кнопка "элементы", на панели инструментов (самая левая). Отображается одноимённая панель инструментов:
 Р В Р’ Р’ Р’ Р’ Р’ Р в‚¬Р В РЎВ˜Р В Р’µР Р…ьшено Р Т‘Р С• 80%
Прикрепленное изображение
1280 x 84 (15.67 килобайт)

Нажата одна кнопка "эскиз", на панели инструментов (вторая слева). Отображается одноимённая панель инструментов:
 Р В Р’ Р’ Р’ Р’ Р’ Р в‚¬Р В РЎВ˜Р В Р’µР Р…ьшено Р Т‘Р С• 80%
Прикрепленное изображение
1279 x 89 (12.32 килобайт)

Нажата стрелка у кнопки "элементы" (самая левая). Отображается её контекстное меню, аналогичное её одноимённой панели инструментов:
 Р В Р’ Р’ Р’ Р’ Р’ Р в‚¬Р В РЎВ˜Р В Р’µР Р…ьшено Р Т‘Р С• 80%
Прикрепленное изображение
1280 x 222 (34.84 килобайт)

Нажата стрелка у кнопки "эскиз" (вторая слева). Отображается её контекстное меню, аналогичное её одноимённой панели инструментов:
 Р В Р’ Р’ Р’ Р’ Р’ Р в‚¬Р В РЎВ˜Р В Р’µР Р…ьшено Р Т‘Р С• 80%
Прикрепленное изображение
1280 x 326 (44.92 килобайт)


Кнопки тригерные, т.е. помнят своё состояние (кроме кнопочки раскрытия выпадающего меню, что логично)

Цитата(JuryS1806 @ 29.1.2010, 2:43) *
Думаю это больше похоже на QTreeView
полагаю, что это вообще не удачный способ. Уж лучше сделать на основе меню, возможно за счёт наследования. Суть изменений - заставить его не скрываться, когда с него фокус уходит. И поместить по нужным координатам, относительно родительского меню.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JuryS1806
  опции профиля:
сообщение 29.1.2010, 1:23
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

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




Репутация:   0  


Да. Неплохие ресурсы зашиты в Solids. Только вот для проектирования места не остается. . И функции дерьмо. Вращение бобышки. Не додумались на ту же бобышку рассчитать центр массы и давай ее вращать через плечо и еще через кое-чтО !

Я все же хочу свой вариант реализовать. Он более рабочий, чем эта юзерфильная хрень с иконками. Может быть вы посодействуете ? Тот же TreeView может использовать ? Или же еще как нибудь возможно ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.1.2010, 1:24
Сообщение #9


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

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

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




Репутация:   94  


моё второе сообщение прилетело раньше твоего, как следствие склеилось с моим предыдущим сообщением (т.е. читай выше)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JuryS1806
  опции профиля:
сообщение 29.1.2010, 1:27
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

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




Репутация:   0  


Блин как сложно-то оказывается ! И как же заставить его не скрывать это меню ? Может быть отловить событие наведения курсора на пункт меню ? Только как это сделать пока не понятно !

Юра, я зачитал. то что было написано выше. Вот смотрю класс QMenu, QMenuBar, пока в замешательстве если честно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.1.2010, 1:27
Сообщение #11


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

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

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




Репутация:   94  


Цитата(JuryS1806 @ 29.1.2010, 4:25) *
И как же заставить его не скрывать это меню ?
надо посмотреть исходник QMenu то место, где его как раз пытаются скрыть.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JuryS1806
  опции профиля:
сообщение 29.1.2010, 1:43
Сообщение #12


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

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




Репутация:   0  


А вот я думаю если я сейчас на все меню добавлю setData.
Сейчас попробую сделать. Любые советы приветствуются ! Как сделаю выложу код.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JuryS1806
  опции профиля:
сообщение 29.1.2010, 2:52
Сообщение #13


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

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




Репутация:   0  


Товарищи !

А как в QListWidget установить цвет фона стандартный для приложения ? К примеру серый?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.1.2010, 8:27
Сообщение #14


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

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

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




Репутация:   94  


Цитата(JuryS1806 @ 29.1.2010, 5:52) *
А как в QListWidget установить цвет фона стандартный для приложения ?
Стандартное правило профессиональных форумов: одна проблема - одна тема

П.С. про поиск по форуму тоже не забываем
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JuryS1806
  опции профиля:
сообщение 29.1.2010, 18:07
Сообщение #15


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

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




Репутация:   0  


А я уже близко к завершению . Как доделаю - скрин и исходники в студию.

Может быть вообще как отдельный виджет представить. Вещь очень удобная.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JuryS1806
  опции профиля:
сообщение 30.1.2010, 7:07
Сообщение #16


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

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




Репутация:   0  


Вот что получилось у меня !

Работает отменно. Без глюков. Только вот оптимизации нет никакой. Сейчас над этим работаю.

Эскизы прикрепленных изображений
 Р В Р’ Р’ Р’ Р’ Р’ Р’˜Р В·Р С•бражение уменьшено
Прикрепленное изображение
221 x 538 (117.71 килобайт)
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JuryS1806
  опции профиля:
сообщение 30.1.2010, 9:21
Сообщение #17


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

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




Репутация:   0  


Вот такая галематья за два дня работы получилась. Отлажена, работает. Но все таки хочется поприятней код. Желательно в виде цикла или итераций. А как сделать пол ночи ума не приложу.

Вот код:

Раскрывающийся текст
#include "helppanel.h"

myBaseMenu::myBaseMenu(const QMenu* BaseMenu,const int Width, QWidget *parent)
    : QWidget(parent)
{
myMenu = BaseMenu;
myWidth = Width;
CreateBaseMenu();
command = new MacroAnalizer();
}

void myBaseMenu::CreateBaseMenu()
{

//Раскрою главное меню
//Обзаведусь переменными
    QListWidgetItem *myBaseMenuItem;
    objectsOfBase = new QListWidget;
    objectsOfSub1 = new QListWidget;
    objectsOfSub1->hide();
    objectsOfSub2 = new QListWidget;
    objectsOfSub2->hide();
    objectsOfSub3 = new QListWidget;
    objectsOfSub3->hide();
    QString myName;

//Настрою внешний вид списков
QPalette palette;
palette.setBrush(QPalette::Base, Qt::NoBrush);
palette.setBrush(QPalette::Highlight, Qt::NoBrush);
palette.setBrush(QPalette::HighlightedText, Qt::black);

//Установлю параметры базовоко списка /submenu0/
objectsOfBase->setIconSize(QSize(20, 20));
objectsOfBase->setMaximumHeight(myMenu->actions().size()*22);
objectsOfBase->setMaximumWidth(myWidth-10);
objectsOfBase->setMinimumWidth(myWidth-10);
//objectsOfBase->setMouseTracking(true);
objectsOfBase->setPalette(palette);
objectsOfBase->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

//Установлю параметры базовоко списка /submenu1/
objectsOfSub1->setIconSize(QSize(20, 20));
objectsOfSub1->setMaximumWidth(myWidth);
objectsOfSub1->setMinimumWidth(myWidth);
//objectsOfBase->setMouseTracking(true);
objectsOfSub1->setPalette(palette);
objectsOfSub1->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

//Установлю параметры базовоко списка /submenu2/
objectsOfSub2->setIconSize(QSize(20, 20));
objectsOfSub2->setMaximumWidth(myWidth-10);
objectsOfSub2->setMinimumWidth(myWidth-10);
//objectsOfBase->setMouseTracking(true);
objectsOfSub2->setPalette(palette);
objectsOfSub2->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

//Установлю параметры базовоко списка /submenu3/
objectsOfSub3->setIconSize(QSize(20, 20));
objectsOfSub3->setMaximumWidth(myWidth);
objectsOfSub3->setMinimumWidth(myWidth);
//objectsOfBase->setMouseTracking(true);
objectsOfSub3->setPalette(palette);
objectsOfSub3->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

//Размещение объектов
    QHBoxLayout *OfBase = new QHBoxLayout;
    OfBase->addWidget(objectsOfBase);
    OfBase->setAlignment(Qt::AlignTop | Qt::AlignRight);

    QHBoxLayout *OfSub1 = new QHBoxLayout;
    OfSub1->addWidget(objectsOfSub1);
    OfSub1->setAlignment(Qt::AlignTop);

    QHBoxLayout *OfSub2 = new QHBoxLayout;
    OfSub2->addWidget(objectsOfSub2);
    OfSub2->setAlignment(Qt::AlignTop | Qt::AlignRight);

    QHBoxLayout *OfSub3 = new QHBoxLayout;
    OfSub3->addWidget(objectsOfSub3);
    OfSub3->setAlignment(Qt::AlignTop);

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addLayout(OfBase);
    mainLayout->addLayout(OfSub1);
    mainLayout->addLayout(OfSub2);
    mainLayout->addLayout(OfSub3);
    mainLayout->setMargin(0);
    mainLayout->setSpacing(5);
    mainLayout->addStretch(1);

    setLayout(mainLayout);

//Раскрываю главное меню
    for (int i=0;i<myMenu->actions().size();++i)
    {
        myBaseMenuItem = new QListWidgetItem(objectsOfBase);
        myBaseMenuItem->setIcon(QIcon(":/Tree/Resurs/Tree/item_closed.png"));
        myBaseMenuItem->setText(myMenu->actions().at(i)->text());
    }
    connect( objectsOfBase,
            SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT( changeHelpPage(QListWidgetItem *, QListWidgetItem*)) );
    connect( objectsOfSub1,
            SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT( changeSub1Page(QListWidgetItem *, QListWidgetItem*)) );
    connect( objectsOfSub2,
            SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT( changeSub2Page(QListWidgetItem *, QListWidgetItem*)) );

    connect( objectsOfSub1,
            SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT( tryExecuteAction(QListWidgetItem *)) );
    connect( objectsOfSub2,
            SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT( tryExecuteAction(QListWidgetItem *)) );
    connect( objectsOfSub3,
            SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT( tryExecuteAction(QListWidgetItem *)) );

}

void myBaseMenu::changeHelpPage(QListWidgetItem *current, QListWidgetItem *previous)
{

    if (!current)
        current = previous;
QFont myFont;
QString myName;

//Обязательная проверка иначе вылетает
if ((objectsOfBase->row(current))>(myMenu->actions().size())) return;

        if (previous)
        {
            myFont = objectsOfBase->item(objectsOfBase->row(previous))->font();
            myFont.setBold(false);
            objectsOfBase->item(objectsOfBase->row(previous))->setFont(myFont);
            objectsOfBase->item(objectsOfBase->row(previous))->setIcon(QIcon(":/Tree/Resurs/Tree/item_closed.png"));
        }

            myFont = objectsOfBase->currentItem()->font();//setFont();
            myFont.setBold(true);
            objectsOfBase->currentItem()->setFont(myFont);
            objectsOfBase->currentItem()->setIcon(QIcon(":/Tree/Resurs/Tree/item_cur.png"));


            objectsOfSub1->clear();
            objectsOfSub2->hide();
            objectsOfSub3->hide();
            objectsOfSub1->show();

mySubMenu1 = myMenu->actions().at(objectsOfBase->row(current))->menu();
QListWidgetItem *mySub1MenuItem;
QIcon icon;

    for (int i=0;i<mySubMenu1->actions().size();++i)
    {
        mySub1MenuItem = new QListWidgetItem(objectsOfSub1);
        icon = mySubMenu1->actions().at(i)->icon();
        if (icon.isNull())
        mySub1MenuItem->setIcon(QIcon(":/Tree/Resurs/Tree/item_closed.png"));
        else mySub1MenuItem->setIcon(icon);
        mySub1MenuItem->setText(mySubMenu1->actions().at(i)->text());
        mySub1MenuItem->setData(32,mySubMenu1->actions().at(i)->data());
    }
objectsOfSub1->setMaximumHeight(mySubMenu1->actions().size()*22);
}

void myBaseMenu::changeSub1Page(QListWidgetItem *current, QListWidgetItem *previous)
{

    if (!current)
        current = previous;
QFont myFont;
QString havedata;

//Обязательная проверка иначе вылетает
if ((objectsOfSub1->row(current))>(mySubMenu1->actions().size())) return;

        if (previous)
        {
            havedata = mySubMenu1->actions().at(objectsOfSub1->row(previous))->data().toString();
            if (havedata.isNull())
            {
            myFont = objectsOfSub1->item(objectsOfSub1->row(previous))->font();
            myFont.setBold(false);
            objectsOfSub1->item(objectsOfSub1->row(previous))->setFont(myFont);
                objectsOfSub1->item(objectsOfSub1->row(previous))->setIcon(QIcon(":/Tree/Resurs/Tree/item_closed.png"));
            }
        }

havedata = mySubMenu1->actions().at(objectsOfSub1->row(current))->data().toString();

if (havedata.isNull())
{
            myFont = objectsOfSub1->item(objectsOfSub1->row(current))->font();
            myFont.setBold(true);
            objectsOfSub1->item(objectsOfSub1->row(current))->setFont(myFont);
            objectsOfSub1->item(objectsOfSub1->row(current))->setIcon(QIcon(":/Tree/Resurs/Tree/item_cur.png"));

    mySubMenu2 = mySubMenu1->actions().at(objectsOfSub1->row(current))->menu();

            objectsOfSub2->clear();

QListWidgetItem *mySub2MenuItem;
QIcon icon;

     for (int i=0;i<mySubMenu2->actions().size();++i)
        {
            mySub2MenuItem = new QListWidgetItem(objectsOfSub2);
            icon = mySubMenu2->actions().at(i)->icon();
            mySub2MenuItem->setIcon(icon);
            mySub2MenuItem->setText(mySubMenu2->actions().at(i)->text());
            mySub2MenuItem->setData(32,mySubMenu2->actions().at(i)->data());
        }
objectsOfSub2->setMaximumHeight(mySubMenu2->actions().size()*22);
objectsOfSub3->hide();
objectsOfSub2->show();
    }
}

void myBaseMenu::changeSub2Page(QListWidgetItem *current, QListWidgetItem *previous)
{

    if (!current)
        current = previous;
QFont myFont;
QString havedata;

//Обязательная проверка иначе вылетает
if ((objectsOfSub2->row(current))>(mySubMenu2->actions().size())) return;

        if (previous)
        {
            havedata = mySubMenu2->actions().at(objectsOfSub2->row(previous))->data().toString();
            if (havedata.isNull())
            {
            myFont = objectsOfSub2->item(objectsOfSub2->row(previous))->font();
            myFont.setBold(false);
            objectsOfSub2->item(objectsOfSub2->row(previous))->setFont(myFont);
            }
        }


havedata = mySubMenu2->actions().at(objectsOfSub2->row(current))->data().toString();

        if (havedata.isNull())
        {
            myFont = objectsOfSub2->item(objectsOfSub2->row(current))->font();
            myFont.setBold(true);
            objectsOfSub2->item(objectsOfSub2->row(current))->setFont(myFont);

    mySubMenu3 = mySubMenu2->actions().at(objectsOfSub2->row(current))->menu();

            objectsOfSub3->clear();

QListWidgetItem *mySub3MenuItem;
QIcon icon;

     for (int i=0;i<mySubMenu3->actions().size();++i)
        {
            mySub3MenuItem = new QListWidgetItem(objectsOfSub3);
            icon = mySubMenu3->actions().at(i)->icon();
            mySub3MenuItem->setIcon(icon);
            mySub3MenuItem->setText(mySubMenu3->actions().at(i)->text());
            mySub3MenuItem->setData(32,mySubMenu3->actions().at(i)->data());
        }
objectsOfSub3->setMaximumHeight(mySubMenu3->actions().size()*22);
objectsOfSub3->show();
    }
else objectsOfSub3->hide();
}

void myBaseMenu::tryExecuteAction(QListWidgetItem *SelectedItem)
{
    command->runAnalizer(SelectedItem->data(32).toString());
}




Ну и заголовок этого чуда виджета:
Раскрывающийся текст
#ifndef PAGESFORMYHELP_H
#define PAGESFORMYHELP_H

#include <QtGui>
#include <AnalizeMacro.h>

class myBaseMenu : public QWidget
{
    Q_OBJECT
public:
    myBaseMenu(const QMenu* BaseMenu,const int Width, QWidget *parent = 0);
    void CreateBaseMenu();
private slots:
    void changeHelpPage(QListWidgetItem *, QListWidgetItem *);
    void changeSub1Page(QListWidgetItem *, QListWidgetItem *);
    void changeSub2Page(QListWidgetItem *, QListWidgetItem *);
    void tryExecuteAction(QListWidgetItem *);
private:
    MacroAnalizer *command;
    int myWidth;
    const QMenu *myMenu;
    QMenu *mySubMenu1;
    QMenu *mySubMenu2;
    QMenu *mySubMenu3;
    QListWidget *objectsOfBase;
    QListWidget *objectsOfSub1;
    QListWidget *objectsOfSub2;
    QListWidget *objectsOfSub3;
};

#endif

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 16.4.2025, 1:55