Qt/C++ создает современный виджет темной темы ⇐ C++
Qt/C++ создает современный виджет темной темы
Я несколько часов пытался получить темную тему QDialog. Сначала идея заключалась в том, чтобы просто покрасить строку заголовка Windows в черный цвет, но после поиска в Google я обнаружил, что мне придется полностью изобретать велосипед, поэтому я установил этот флаг:
setWindowFlags(Qt::FramelessWindowHint); setAttribute(Qt::WA_TranslucentBackground); Теперь мне пришлось:
[*]создать собственную строку заголовка с заголовком и кнопками «Свернуть», «Развернуть» и «Закрыть». [*]изменить размер диалога [*]скруглить углы [*]сделать диалог перетаскиваемым
Я сделал много вещей, но все еще не так, как мне хотелось.. Я реализовал закругленные края следующим образом:
void DialogTemplate::paintEvent(событие QPaintEvent*) { Q_UNUSED (событие); Художник QPainter(это); Painter.setRenderHint(QPainter::Сглаживание); Painter.fillRect(rect(), Qt::transparent); // Рисуем закругленные края Путь QPainterPath; path.addRoundedRect(rect().adjusted(5, 5, -5, -5), 10, 10); // Стиль диалога для QPainterPath QStyleOption опция; opt.initFrom(это); художник.setClipPath(путь); style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this); // заливаем фоновый цвет строки заголовка черным QRect titleBarRect(0, 0, ширина(), высота()); Painter.fillRect(titleBarRect, Qt::black); // Zeichnen Sie den Dialoginhalt QDialog::paintEvent(событие); } [*]для изменения размера я использовал этот код: Qt/Windows, безрамочное окно с изменяемым размером. Теперь можно изменить размер диалогового окна, но область, в которой я могу изменить размер окна, мала, особенно на окрашенных краях моего диалогового окна, я не могу захватить угол, чтобы правильно изменить размер ширины и высоты окна.
[*]
При развертывании диалога он на самом деле не разворачивается, между диалогом и концом монитора все еще остается зазор, и я не понимаю, почему это происходит..
[*]
Моим последним желанием было бы, чтобы и в окне, оформленном в стиле Windows по умолчанию, кнопка выхода находилась в закругленном углу. Не знаю, как мне это сделать.
Я несколько часов пытался получить темную тему QDialog. Сначала идея заключалась в том, чтобы просто покрасить строку заголовка Windows в черный цвет, но после поиска в Google я обнаружил, что мне придется полностью изобретать велосипед, поэтому я установил этот флаг:
setWindowFlags(Qt::FramelessWindowHint); setAttribute(Qt::WA_TranslucentBackground); Теперь мне пришлось:
[*]создать собственную строку заголовка с заголовком и кнопками «Свернуть», «Развернуть» и «Закрыть». [*]изменить размер диалога [*]скруглить углы [*]сделать диалог перетаскиваемым
Я сделал много вещей, но все еще не так, как мне хотелось.. Я реализовал закругленные края следующим образом:
void DialogTemplate::paintEvent(событие QPaintEvent*) { Q_UNUSED (событие); Художник QPainter(это); Painter.setRenderHint(QPainter::Сглаживание); Painter.fillRect(rect(), Qt::transparent); // Рисуем закругленные края Путь QPainterPath; path.addRoundedRect(rect().adjusted(5, 5, -5, -5), 10, 10); // Стиль диалога для QPainterPath QStyleOption опция; opt.initFrom(это); художник.setClipPath(путь); style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this); // заливаем фоновый цвет строки заголовка черным QRect titleBarRect(0, 0, ширина(), высота()); Painter.fillRect(titleBarRect, Qt::black); // Zeichnen Sie den Dialoginhalt QDialog::paintEvent(событие); } [*]для изменения размера я использовал этот код: Qt/Windows, безрамочное окно с изменяемым размером. Теперь можно изменить размер диалогового окна, но область, в которой я могу изменить размер окна, мала, особенно на окрашенных краях моего диалогового окна, я не могу захватить угол, чтобы правильно изменить размер ширины и высоты окна.
[*]
При развертывании диалога он на самом деле не разворачивается, между диалогом и концом монитора все еще остается зазор, и я не понимаю, почему это происходит..
[*]
Моим последним желанием было бы, чтобы и в окне, оформленном в стиле Windows по умолчанию, кнопка выхода находилась в закругленном углу. Не знаю, как мне это сделать.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение