crossplatform.ru

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

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
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 Текстовая версия Сейчас: 24.4.2025, 20:13