QT4: Прозрачное окно с закругленными углами

Как создать частично прозрачное окно с закругленными границами (без стандартных границ)?

(Я использовал Qt::FramelessWindowHint для отключения стандартных границ)

Я пробовал стили, но border-radius и opacity , похоже, не оказывают никакого влияния на окно, она работает только с дочерними элементами встроенного виджета.

Моя вторая идея заключалась в том, чтобы сделать окно полностью прозрачным (с помощью setWindowOpacity ), а затем добавить дополнительный виджет с закругленными углами (поскольку border-radius работает над setWindowOpacity элементами), а затем группировать все мои другие виджеты в этот виджет. Но это не работает, поскольку setWindowOpacity влияет и на всех детей (я не нашел способа изменить это поведение).

И любые способы сделать прозрачное внешнее окно, о котором я мог думать (например, opacity стилей), не работают должным образом (я получаю только черный ящик вместо прозрачного windows)

Любая помощь будет высоко оценен.

У меня была аналогичная проблема, когда я хотел нарисовать виджет верхнего уровня и отобразить только окрашенную часть. setWindowOpacity изменила непрозрачность окрашенной части, чего я не хотел.

 this->setAttribute(Qt::WA_TranslucentBackground, true); 

изменил непрозрачность виджета без раскрашенной части. Я просто попытался броситься на кнопку, и это также выглядит совершенно непрозрачным. Поэтому вы должны иметь возможность отображать других детей, как вам нравится.

Я думаю, вы должны использовать маски виджетов, как показано в следующем примере из Qt:

http://doc.qt.io/qt-5/qtwidgets-widgets-shapedclock-example.html

Я думаю, вы найдете то, что ищете в нем!

Надеюсь это немного поможет!

  void MainForm::resizeEvent(QResizeEvent * /* event */) { QImage image(this->size(), QImage::Format_Mono); image.fill(0); if(!this->isFullScreen() && !this->isMaximized()) { image.setPixel(0, 0, 1); image.setPixel(1, 0, 1); image.setPixel(2, 0, 1); image.setPixel(3, 0, 1); image.setPixel(0, 1, 1); image.setPixel(1, 1, 1); image.setPixel(0, 2, 1); image.setPixel(0, 3, 1); image.setPixel(width() - 4, 0, 1); image.setPixel(width() - 3, 0, 1); image.setPixel(width() - 2, 0, 1); image.setPixel(width() - 1, 0, 1); image.setPixel(width() - 2, 1, 1); image.setPixel(width() - 1, 1, 1); image.setPixel(width() - 1, 2, 1); image.setPixel(width() - 1, 3, 1); image.setPixel(0, height() - 4, 1); image.setPixel(0, height() - 3, 1); image.setPixel(0, height() - 2, 1); image.setPixel(1, height() - 2, 1); image.setPixel(0, height() - 1, 1); image.setPixel(1, height() - 1, 1); image.setPixel(2, height() - 1, 1); image.setPixel(3, height() - 1, 1); image.setPixel(width() - 1, height() - 4, 1); image.setPixel(width() - 1, height() - 3, 1); image.setPixel(width() - 2, height() - 2, 1); image.setPixel(width() - 1, height() - 2, 1); image.setPixel(width() - 4, height() - 1, 1); image.setPixel(width() - 3, height() - 1, 1); image.setPixel(width() - 2, height() - 1, 1); image.setPixel(width() - 1, height() - 1, 1); } this->setMask(QPixmap::fromImage(image)); } 
Interesting Posts

Почему не сужение конверсии, используемой с инициализатором с зависящими от фигурной скобки, вызывает ошибку?

atoi – как определить разницу между нулем и ошибкой?

Лучший способ скрыть окно от переключателя программ Alt-Tab?

NSInternalInconsistencyException Не удалось загрузить nib в комплекте

Откройте приложение Android из URL-адреса, не используя рабочий фильтр

Как создать временную таблицу в базе данных Oracle?

Проблема при получении текста в формате JSON, содержащем разрывы строк с помощью jQuery

свойство системы настройки

Двойная буферизация, если не рисовать в OnPaint (): почему она не работает?

Невозможно выполнить поиск в панели действий.

Jar для Mac OSX App Bundle с приложением

Возможно ли переустановить / исправить системный рубин Mac OS X без полной переустановки ОС?

Выбор того IP-адреса, который используется HTTP-запросом при наличии нескольких IP-адресов (.NET)

Командная строка Windows 7 для сохранения в виде файла .pdf для слова 2013 .docx file

C # самый быстрый способ смены массива

Давайте будем гением компьютера.