Qt 3 затемнение нижних окон

Тема в разделе "Использование Qt", создана пользователем mdlv, 3 сен 2014.

  1. mdlv

    mdlv New Member

    Регистрация:
    3 сен 2014
    Сообщения:
    1
    Симпатии:
    0
    Добрый день!
    В приложении открывается множество форм типа QWidget. Задача: сделать затемнение неактивных окон, чтобы к ним не было доступа, а работа велась только с активным. Я пытаюсь сделать эт при помощи отдельного QWidget и задать ему степень прозрачности, при вызове новой формы показывать этот виджет, а затем поверх него отображать нужное активное окно.
    Проблема в том, что не получается сделать виджет прозрачным.
    Пробовал так:
    Код (C++):
    QWidget* fr = new QWidget(0,0, Qt::WType_Modal | Qt::TransparentMode);
    fr->setActiveWindow();
    fr->show();
    Так:
    Код (C++):
     fr->setStyle("background-color: rgba(0, 0, 0, 30%)");
    И вот так:
    Код (C++):
     fr->setStyle("background:rgba(0,0,0,70%)");
    И так:
    Код (C++):
    setWindowOpacity(0.5);
    Пытаюсь безуспешно найти аналог в qt3 для
    Код (C++):
    setAttribute(Qt::WA_TranslucentBackground);
    Пробовал через QPalette:
    Код (C++):
    QPalette palette = fr->palette();
    QColor color = palette.color(QPalette::Normal, QColorGroup::Background);
    QRgb rgb = qRgba(color.red(), color.green(), color.blue(), 130);
    palette.setColor(QPalette::Normal, QColorGroup::Background, rgb);
    fr->setPalette(palette);
    и через Pixmap с png, который имеет степень прозрачности:
    Код (C++):
    QPixmap qp;
    qp.load(dir + "mask.png");
    ft->setPixmap(qp);
    Может, есть какие-то методы или флаги для прозрачности? Или предложите, пожалуйста, другой способ решения задачи - как сделать эффект затемнения нижних окон, оставив только одно текущее? При этом затемненные окна не должны реагировать на любые нажатия, но фоновые процессы в приложении не должны блокироваться, как при exec() с QDialog, например. Заблокировать нажатия на нижнии окна удалось, используя при создании окна флаг Qt::WType_Modal, единственная проблема - отсутствие затемнения и нижнии неактивные формы все равно можно перетаскивать и изменять их размеры, а этого быть не должно. Эффект затемнения в принципе можно сделать, временно изменив цветовую палитру нижних окон... Но как убрать ресайзинг и пететаскивание?

    Заранее спасибо за любые подсказки и решения!
     

Поделиться этой страницей