Использование Qt для создания эффекта прозрачности OS X Yosemite
Мы пытаемся создать QMainWindow с эффектом прозрачности Yosemite для Mac OSX. Мы используем PyQt, но проблема в Qt. С тем, что мы пробовали до сих пор, оно всегда либо полностью прозрачное, либо полностью непрозрачное (как обычное окно). Если мы включим Qt.WA_TranslucentBackground, фон окна станет на 100% полностью прозрачным.
Кроме того, отображаемый на нем QGraphicsView оставляет следы при прокрутке. Ввод мыши также "проходит" через прозрачные части - щелчок прозрачной части графического представления регистрируется как щелчок в окне позади него. Установка таблицы стилей с любым пользовательским цветом фона не имеет никакого эффекта. Если мы выключим его, окно останется непрозрачным. Затем мы можем изменить цвет фона, используя таблицу стилей, но она все еще непрозрачна.
Включение и выключение Turing WA_FramelessWindowHint, похоже, тоже ничего не исправляет. Также не setAutoFillBackground(). Вы знаете, как сделать окно с эффектом прозрачности Йосемити?
Вот пример программы на Python для проверки этого: -
# Attempt at Mac OSX Translucency (example code)
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
Qt = QtCore.Qt
class ExampleMainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.testWidget = QtWidgets.QLabel('Test label, which should be transparent')
# Make sure the testWidget is transparent
self.testWidget.setStyleSheet('background: transparent')
self.testWidget.setAttribute(Qt.WA_TranslucentBackground, True)
self.testWidget.setAutoFillBackground(True)
self.setStyleSheet('background: rgba(255, 255, 255, 0.8)')
self.setAttribute(Qt.WA_TranslucentBackground, True)
self.setAutoFillBackground(True)
#self.setWindowFlags(Qt.FramelessWindowHint) # Doesn't seem to help
self.setCentralWidget(self.testWidget)
def main():
global app, exWindow
app = QtWidgets.QApplication(sys.argv)
exWindow = ExampleMainWindow()
exWindow.show()
exitcodesys = app.exec_()
app.deleteLater()
sys.exit(exitcodesys)
if __name__ == '__main__': main()
1 ответ
Ваша таблица стилей недействительна. Rgba Qt ожидает целое число в диапазоне 0-255 или процент только для значений. Так что используйте 80% вместо 0,8. Наряду с WA_TranslucentBackground, который должен помочь вам.
И, пожалуйста, опубликуйте свой код в вопросе, так как срок действия ваших паст истекает через несколько дней, и тогда этот вопрос будет бесполезен.
Вот код, который работает для меня; Я вижу окна других моих приложений внизу. Это C++. Я использую Qt4, а не 5; возможно это имеет значение.
#include <QMainWindow>
#include <QApplication>
#include <QLabel>
class MyMain : public QMainWindow
{
Q_OBJECT
public:
MyMain(QWidget* parent = 0);
};
MyMain::MyMain(QWidget* parent)
: QMainWindow(parent)
{
setAttribute(Qt::WA_TranslucentBackground, true);
setStyleSheet("background: rgba(0,0,0,80%);");
QLabel* foo = new QLabel();
foo->setText("hello");
foo->setStyleSheet("color: white;");
setCentralWidget(foo);
}
#include "main.moc"
int main(int argc, char** argv)
{
QApplication app(argc, argv);
MyMain m;
m.show();
return app.exec();
}