forked from github_mirror/framelesshelper
widget: add support for changing title font
Not needed for Qt Quick, because you can easily to change it: ```qml StandardTitleBar { titleLabel { font { family: "Arial" pointSize: 10 italic: true } } } ``` Signed-off-by: Yuhang Zhao <2546789017@qq.com>
This commit is contained in:
parent
f052a087de
commit
5018d9ea82
|
@ -25,7 +25,7 @@
|
|||
cmake_minimum_required(VERSION 3.20)
|
||||
|
||||
project(FramelessHelper
|
||||
VERSION 2.2.1.0
|
||||
VERSION 2.3.0.0
|
||||
DESCRIPTION "Cross-platform window customization framework for Qt Widgets and Qt Quick."
|
||||
HOMEPAGE_URL "https://github.com/wangwenx190/framelesshelper/"
|
||||
LANGUAGES CXX
|
||||
|
|
|
@ -41,8 +41,13 @@
|
|||
# endif // ((QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) && !REGISTRYKEY_FORCE_QSETTINGS)
|
||||
#endif // REGISTRYKEY_IMPL
|
||||
|
||||
#define REGISTRYKEY_QWINREGISTRYKEY ((REGISTRYKEY_IMPL) == 1)
|
||||
#define REGISTRYKEY_QSETTINGS ((REGISTRYKEY_IMPL) == 2)
|
||||
#ifndef REGISTRYKEY_QWINREGISTRYKEY
|
||||
# define REGISTRYKEY_QWINREGISTRYKEY ((REGISTRYKEY_IMPL) == 1)
|
||||
#endif // REGISTRYKEY_QWINREGISTRYKEY
|
||||
|
||||
#ifndef REGISTRYKEY_QSETTINGS
|
||||
# define REGISTRYKEY_QSETTINGS ((REGISTRYKEY_IMPL) == 2)
|
||||
#endif // REGISTRYKEY_QSETTINGS
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QWinRegistryKey;
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include "standardtitlebar.h"
|
||||
#include <QtCore/qobject.h>
|
||||
#include <QtCore/qpointer.h>
|
||||
#include <optional>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QPaintEvent;
|
||||
|
@ -73,6 +74,9 @@ public:
|
|||
Q_NODISCARD bool windowIconVisible() const;
|
||||
void setWindowIconVisible(const bool value);
|
||||
|
||||
Q_NODISCARD QFont titleFont() const;
|
||||
void setTitleFont(const QFont &value);
|
||||
|
||||
public Q_SLOTS:
|
||||
void updateMaximizeButton();
|
||||
void updateTitleBarColor();
|
||||
|
@ -98,6 +102,7 @@ private:
|
|||
bool m_titleLabelVisible = true;
|
||||
QSize m_windowIconSize = {};
|
||||
bool m_windowIconVisible = false;
|
||||
std::optional<QFont> m_titleFont = std::nullopt;
|
||||
};
|
||||
|
||||
FRAMELESSHELPER_END_NAMESPACE
|
||||
|
|
|
@ -51,6 +51,7 @@ class FRAMELESSHELPER_WIDGETS_API StandardTitleBar : public QWidget
|
|||
Q_PROPERTY(bool titleLabelVisible READ titleLabelVisible WRITE setTitleLabelVisible NOTIFY titleLabelVisibleChanged FINAL)
|
||||
Q_PROPERTY(QSize windowIconSize READ windowIconSize WRITE setWindowIconSize NOTIFY windowIconSizeChanged FINAL)
|
||||
Q_PROPERTY(bool windowIconVisible READ windowIconVisible WRITE setWindowIconVisible NOTIFY windowIconVisibleChanged FINAL)
|
||||
Q_PROPERTY(QFont titleFont READ titleFont WRITE setTitleFont NOTIFY titleFontChanged FINAL)
|
||||
|
||||
public:
|
||||
explicit StandardTitleBar(QWidget *parent = nullptr);
|
||||
|
@ -80,6 +81,9 @@ public:
|
|||
Q_NODISCARD bool windowIconVisible() const;
|
||||
void setWindowIconVisible(const bool value);
|
||||
|
||||
Q_NODISCARD QFont titleFont() const;
|
||||
void setTitleFont(const QFont &value);
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *event) override;
|
||||
|
||||
|
@ -90,6 +94,7 @@ Q_SIGNALS:
|
|||
void titleLabelVisibleChanged();
|
||||
void windowIconSizeChanged();
|
||||
void windowIconVisibleChanged();
|
||||
void titleFontChanged();
|
||||
|
||||
private:
|
||||
QScopedPointer<StandardTitleBarPrivate> d_ptr;
|
||||
|
|
|
@ -34,10 +34,10 @@
|
|||
#pragma once
|
||||
|
||||
[[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_MAJOR = 2;
|
||||
[[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_MINOR = 2;
|
||||
[[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_PATCH = 1;
|
||||
[[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_MINOR = 3;
|
||||
[[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_PATCH = 0;
|
||||
[[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_TWEAK = 0;
|
||||
[[maybe_unused]] static constexpr const char FRAMELESSHELPER_VERSION_STR[] = "2.2.1.0\0";
|
||||
[[maybe_unused]] static constexpr const char FRAMELESSHELPER_VERSION_STR[] = "2.3.0.0\0";
|
||||
[[maybe_unused]] static constexpr const char FRAMELESSHELPER_COMMIT_STR[] = "UNKNOWN\0";
|
||||
[[maybe_unused]] static constexpr const char FRAMELESSHELPER_COMPILE_DATETIME_STR[] = "UNKNOWN\0";
|
||||
|
||||
|
|
|
@ -154,13 +154,12 @@ void StandardTitleBarPrivate::paintTitleBar(QPaintEvent *event)
|
|||
if (m_titleLabelVisible) {
|
||||
const QString text = m_window->windowTitle();
|
||||
if (!text.isEmpty()) {
|
||||
const QFont font = [q]() -> QFont {
|
||||
painter.setPen(foregroundColor);
|
||||
painter.setFont(m_titleFont.value_or([q]() -> QFont {
|
||||
QFont f = q->font();
|
||||
f.setPointSize(kDefaultTitleBarFontPointSize);
|
||||
return f;
|
||||
}();
|
||||
painter.setPen(foregroundColor);
|
||||
painter.setFont(font);
|
||||
}()));
|
||||
const QRect rect = [this, q, titleLabelLeftOffset]() -> QRect {
|
||||
const int w = q->width();
|
||||
int leftMargin = 0;
|
||||
|
@ -235,6 +234,22 @@ void StandardTitleBarPrivate::setWindowIconVisible(const bool value)
|
|||
Q_EMIT q->windowIconVisibleChanged();
|
||||
}
|
||||
|
||||
QFont StandardTitleBarPrivate::titleFont() const
|
||||
{
|
||||
return m_titleFont.value_or(QFont());
|
||||
}
|
||||
|
||||
void StandardTitleBarPrivate::setTitleFont(const QFont &value)
|
||||
{
|
||||
if (titleFont() == value) {
|
||||
return;
|
||||
}
|
||||
m_titleFont = value;
|
||||
Q_Q(StandardTitleBar);
|
||||
q->update();
|
||||
Q_EMIT q->titleFontChanged();
|
||||
}
|
||||
|
||||
void StandardTitleBarPrivate::updateMaximizeButton()
|
||||
{
|
||||
const bool max = m_window->isMaximized();
|
||||
|
@ -478,6 +493,18 @@ void StandardTitleBar::setWindowIconVisible(const bool value)
|
|||
d->setWindowIconVisible(value);
|
||||
}
|
||||
|
||||
QFont StandardTitleBar::titleFont() const
|
||||
{
|
||||
Q_D(const StandardTitleBar);
|
||||
return d->titleFont();
|
||||
}
|
||||
|
||||
void StandardTitleBar::setTitleFont(const QFont &value)
|
||||
{
|
||||
Q_D(StandardTitleBar);
|
||||
d->setTitleFont(value);
|
||||
}
|
||||
|
||||
void StandardTitleBar::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
Q_D(StandardTitleBar);
|
||||
|
|
Loading…
Reference in New Issue