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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО]Боковая панель  (Прочитано 7244 раз)
Larry
Гость
« : Март 01, 2016, 15:32 »

Добрый день.
Подскажите, как можно расположить панель (Qwidget) на другом виджете? Есть QWebView и поверх него необходимо располагать панели, которые можно скрыть и т.д. и т.п. Можно ли будет сверху него расположить другие виджеты?
« Последнее редактирование: Март 09, 2016, 09:38 от Larry » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #1 : Март 01, 2016, 15:45 »

QWebView — виджет, а на любой виджет можно наложить другой виджет. QWidget *panel = new QWidget(webView);
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Larry
Гость
« Ответ #2 : Март 01, 2016, 15:54 »

Спасибо, протупил Улыбающийся
Записан
Larry
Гость
« Ответ #3 : Март 01, 2016, 16:29 »

Попробовал вот так, но виджета нет. QDockPanel наследник от QFrame, где есть два виджета header и panel:
Код:
m_dockpanel = new QDockPanel(ui->wvViewMap);
m_dockpanel->setGeometry(100, 100, 200, 200);
m_dockpanel->show();
Записан
Larry
Гость
« Ответ #4 : Март 01, 2016, 17:29 »

Теперь заработало...фон забыл добавить Улыбающийся
Записан
Larry
Гость
« Ответ #5 : Март 03, 2016, 10:17 »

Добрый день.
Доделал почти панель, но возникла проблема с анимацией. После запуска программы панель сворачивается/разворачивается нормально, но стоит только изменить размеры (растянуть мышкой), то тут же ломается...
Вот метод анимации:
Код:
void QDockPanel::slotChangeState(bool state)
{
    QPropertyAnimation* animation = new QPropertyAnimation(this, "geometry");

    QRect brect, erect;

    m_state = !state; // текущее состояние панели

    if(state)
    {
        if(m_stick == stick_t::LEFT_STICK) // левая панель
        {
            brect = QRect(0, 0, this->m_size.width(), this->m_size.height());
            erect = QRect(0, 0, m_header->button()->width(), this->m_size.height());
        }
        else if(m_stick == stick_t::RIGHT_STICK) // правая панель
        {
            brect = QRect(this->parentWidget()->geometry().width() - this->m_size.width(), 0, this->m_size.width(),
                          this->m_size.height());
            erect = QRect(this->parentWidget()->geometry().width() - m_header->button()->width(), 0, m_header->button()->width(),
                          this->m_size.height());
        }
    }
    else
    {
        if(m_stick == stick_t::LEFT_STICK) // левая панель
        {
            brect = QRect(0, 0, m_header->button()->width(), this->m_size.height());
            erect = QRect(0, 0, this->m_size.width(), this->m_size.height());
        }
        else if(m_stick == stick_t::RIGHT_STICK) // правая панель
        {
            brect = QRect(this->parentWidget()->geometry().width() - m_header->button()->width(), 0, m_header->button()->width(),
                          this->m_size.height());
            erect = QRect(this->parentWidget()->geometry().width() - this->m_size.width(), 0, this->m_size.width(),
                                                                                              this->m_size.height());
        }
    }

    animation->setDuration(m_duration);
    animation->setStartValue(brect);
    animation->setEndValue(erect);

    connect(animation, SIGNAL(finished()), this, SLOT(slotFinishedChangeState()));

    animation->start();
}

хотя по логу вроде бы все нормально, размеры выводит адекватно...
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #6 : Март 03, 2016, 10:25 »

Добрый день.
Доделал почти панель, но возникла проблема с анимацией. После запуска программы панель сворачивается/разворачивается нормально, но стоит только изменить размеры (растянуть мышкой), то тут же ломается...
Вот метод анимации:
Код:
void QDockPanel::slotChangeState(bool state)
{
    QPropertyAnimation* animation = new QPropertyAnimation(this, "geometry");

    QRect brect, erect;

    m_state = !state; // текущее состояние панели

    if(state)
    {
        if(m_stick == stick_t::LEFT_STICK) // левая панель
        {
            brect = QRect(0, 0, this->m_size.width(), this->m_size.height());
            erect = QRect(0, 0, m_header->button()->width(), this->m_size.height());
        }
        else if(m_stick == stick_t::RIGHT_STICK) // правая панель
        {
            brect = QRect(this->parentWidget()->geometry().width() - this->m_size.width(), 0, this->m_size.width(),
                          this->m_size.height());
            erect = QRect(this->parentWidget()->geometry().width() - m_header->button()->width(), 0, m_header->button()->width(),
                          this->m_size.height());
        }
    }
    else
    {
        if(m_stick == stick_t::LEFT_STICK) // левая панель
        {
            brect = QRect(0, 0, m_header->button()->width(), this->m_size.height());
            erect = QRect(0, 0, this->m_size.width(), this->m_size.height());
        }
        else if(m_stick == stick_t::RIGHT_STICK) // правая панель
        {
            brect = QRect(this->parentWidget()->geometry().width() - m_header->button()->width(), 0, m_header->button()->width(),
                          this->m_size.height());
            erect = QRect(this->parentWidget()->geometry().width() - this->m_size.width(), 0, this->m_size.width(),
                                                                                              this->m_size.height());
        }
    }

    animation->setDuration(m_duration);
    animation->setStartValue(brect);
    animation->setEndValue(erect);

    connect(animation, SIGNAL(finished()), this, SLOT(slotFinishedChangeState()));

    animation->start();
}

хотя по логу вроде бы все нормально, размеры выводит адекватно...

Локализуйте место ошибки и напишите проблемную строку, а если приложите минимальный проект, вообще будет замечательно
Записан

Larry
Гость
« Ответ #7 : Март 03, 2016, 10:38 »

Локализовать место ошибки не получается, т.к. вроде все нормально отрабатывается...Попробую сделать минимальный проект...
На изображении 1 и 2 это развернутая и свернутая панель до изменения размера, а на изображении 3 - это свернутая (так и не свернулась) после изменения размера.
Записан
Larry
Гость
« Ответ #8 : Март 03, 2016, 10:59 »

Минимальный проект вложил...
Записан
Larry
Гость
« Ответ #9 : Март 04, 2016, 09:59 »

Решил попробовать изменить размер программно и сделал по правому клику на панели изменение ширины...при этом все обрабатывается адекватно, а после растягивания мышкой панели ничего не работает...не могу понять почему...
Записан
Larry
Гость
« Ответ #10 : Март 04, 2016, 10:13 »

Решил проблему, все работает. Всем спасибо. Виновником оказался метод setFixedWidth, который вызывался при изменении размеров панели мышкой. Причем либо невнимательно читал мануал, либо там нет такого, что нельзя фиксировать размер - об этом прочитал в одном посте на зарубежном сайте.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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