Use QtPropertyBrowser for Qt5/6

This commit is contained in:
Miodrag Milanovic 2025-10-13 13:21:05 +02:00
parent c7836625b9
commit f8bf8c1807
9 changed files with 94 additions and 17 deletions

View File

@ -1,11 +1,3 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.13)
PROJECT(QtPropertyBrowser)
##################### Look for required libraries ######################
# Add QT dependencies
FIND_PACKAGE(Qt5Widgets REQUIRED)
######################### Add Primary Targets ##########################
ADD_SUBDIRECTORY(src)

View File

@ -23,8 +23,13 @@ set(_RESOURCES
qtpropertybrowser.qrc
)
QT5_WRAP_UI(_UI_SRCS ${_UI_FORMS})
QT5_ADD_RESOURCES(_QRC_SRCS ${_RESOURCES})
if (Qt6_FOUND)
QT6_WRAP_UI(_UI_SRCS ${_UI_FORMS})
QT6_ADD_RESOURCES(_QRC_SRCS ${_RESOURCES})
else()
QT5_WRAP_UI(_UI_SRCS ${_UI_FORMS})
QT5_ADD_RESOURCES(_QRC_SRCS ${_RESOURCES})
endif()
set(TARGET_NAME ${PROJECT_NAME})
@ -38,4 +43,8 @@ if (MSVC)
target_compile_options(${TARGET_NAME} PRIVATE /wd4457 /wd4718)
endif()
target_link_libraries(${TARGET_NAME} Qt5::Widgets)
if (Qt6_FOUND)
target_link_libraries(${TARGET_NAME} Qt6::Widgets)
else()
target_link_libraries(${TARGET_NAME} Qt5::Widgets)
endif()

View File

@ -0,0 +1,12 @@
#pragma once
#include <QtGlobal>
#if QT_VERSION_MAJOR >= 6
#include <QRegularExpression>
#include <QRegularExpressionValidator>
// QRegExp / QRegExpValidator aliases
using QRegExp = QRegularExpression;
using QRegExpValidator = QRegularExpressionValidator;
#endif

View File

@ -1545,7 +1545,11 @@ QtCharEdit::QtCharEdit(QWidget *parent)
{
QHBoxLayout *layout = new QHBoxLayout(this);
layout->addWidget(m_lineEdit);
#if QT_VERSION_MAJOR >= 6
layout->setContentsMargins(0,0,0,0);
#else
layout->setMargin(0);
#endif
m_lineEdit->installEventFilter(this);
m_lineEdit->setReadOnly(true);
m_lineEdit->setFocusProxy(this);
@ -1669,7 +1673,13 @@ void QtCharEdit::keyReleaseEvent(QKeyEvent *e)
void QtCharEdit::paintEvent(QPaintEvent *)
{
QStyleOption opt;
#if QT_VERSION_MAJOR >= 6
opt.rect = this->rect();
opt.state = isEnabled() ? QStyle::State_Enabled : QStyle::State_None;
opt.palette = this->palette();
#else
opt.init(this);
#endif
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
@ -2240,7 +2250,13 @@ bool QtColorEditWidget::eventFilter(QObject *obj, QEvent *ev)
void QtColorEditWidget::paintEvent(QPaintEvent *)
{
QStyleOption opt;
#if QT_VERSION_MAJOR >= 6
opt.rect = this->rect();
opt.state = isEnabled() ? QStyle::State_Enabled : QStyle::State_None;
opt.palette = this->palette();
#else
opt.init(this);
#endif
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
@ -2462,7 +2478,13 @@ bool QtFontEditWidget::eventFilter(QObject *obj, QEvent *ev)
void QtFontEditWidget::paintEvent(QPaintEvent *)
{
QStyleOption opt;
#if QT_VERSION_MAJOR >= 6
opt.rect = this->rect();
opt.state = isEnabled() ? QStyle::State_Enabled : QStyle::State_None;
opt.palette = this->palette();
#else
opt.init(this);
#endif
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}

View File

@ -41,6 +41,8 @@
#ifndef QTPROPERTYBROWSER_H
#define QTPROPERTYBROWSER_H
#include "qt5compat.h"
#include <QWidget>
#include <QtCore/QSet>

View File

@ -262,7 +262,13 @@ void QtBoolEdit::mousePressEvent(QMouseEvent *event)
void QtBoolEdit::paintEvent(QPaintEvent *)
{
QStyleOption opt;
#if QT_VERSION_MAJOR >= 6
opt.rect = this->rect();
opt.state = isEnabled() ? QStyle::State_Enabled : QStyle::State_None;
opt.palette = this->palette();
#else
opt.init(this);
#endif
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
@ -274,7 +280,11 @@ QtKeySequenceEdit::QtKeySequenceEdit(QWidget *parent)
{
QHBoxLayout *layout = new QHBoxLayout(this);
layout->addWidget(m_lineEdit);
#if QT_VERSION_MAJOR >= 6
layout->setContentsMargins(0,0,0,0);
#else
layout->setMargin(0);
#endif
m_lineEdit->installEventFilter(this);
m_lineEdit->setReadOnly(true);
m_lineEdit->setFocusProxy(this);
@ -408,7 +418,13 @@ void QtKeySequenceEdit::keyReleaseEvent(QKeyEvent *e)
void QtKeySequenceEdit::paintEvent(QPaintEvent *)
{
QStyleOption opt;
#if QT_VERSION_MAJOR >= 6
opt.rect = this->rect();
opt.state = isEnabled() ? QStyle::State_Enabled : QStyle::State_None;
opt.palette = this->palette();
#else
opt.init(this);
#endif
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}

View File

@ -1229,7 +1229,11 @@ public:
struct Data
{
Data() : regExp(QString(QLatin1Char('*')), Qt::CaseSensitive, QRegExp::Wildcard)
#if QT_VERSION_MAJOR >= 6
Data() : regExp(QRegularExpression(QStringLiteral(".*")))
#else
Data() : regExp(QString(QLatin1Char('*')), Qt::CaseSensitive, QRegExp::Wildcard)
#endif
{
}
QString val;
@ -1357,7 +1361,11 @@ void QtStringPropertyManager::setValue(QtProperty *property, const QString &val)
if (data.val == val)
return;
#if QT_VERSION_MAJOR >= 6
if (data.regExp.isValid() && !data.regExp.match(val).hasMatch())
#else
if (data.regExp.isValid() && !data.regExp.exactMatch(val))
#endif
return;
data.val = val;
@ -5854,8 +5862,13 @@ void QtFontPropertyManager::setValue(QtProperty *property, const QFont &val)
return;
const QFont oldVal = it.value();
#if QT_VERSION_MAJOR >= 6
if (oldVal == val && oldVal.resolve(val) == val)
return;
#else
if (oldVal == val && oldVal.resolve() == val.resolve())
return;
#endif
it.value() = val;

View File

@ -132,9 +132,9 @@ public:
protected:
void mouseMoveEvent(QMouseEvent *event) override;
void leaveEvent(QEvent *event) override;
void keyPressEvent(QKeyEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
void drawRow(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
void keyPressEvent(QKeyEvent *event);
void mousePressEvent(QMouseEvent *event);
void drawRow(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
Q_SIGNALS:
void hoverPropertyChanged(QtBrowserItem *item);
@ -160,7 +160,8 @@ void QtPropertyEditorView::drawRow(QPainter *painter, const QStyleOptionViewItem
hasValue = property->hasValue();
}
if (!hasValue && m_editorPrivate->markPropertiesWithoutValue()) {
const QColor c = option.palette.color(QPalette::Dark);
QColor c = m_editorPrivate->calculatedBackgroundColor(m_editorPrivate->indexToBrowserItem(index));
if (!c.isValid()) c = option.palette.color(QPalette::Dark);
painter->fillRect(option.rect, c);
opt.palette.setColor(QPalette::AlternateBase, c);
} else {
@ -379,7 +380,8 @@ void QtPropertyEditorDelegate::paint(QPainter *painter, const QStyleOptionViewIt
}
QColor c;
if (!hasValue && m_editorPrivate->markPropertiesWithoutValue()) {
c = opt.palette.color(QPalette::Dark);
c = m_editorPrivate->calculatedBackgroundColor(m_editorPrivate->indexToBrowserItem(index));
if (!c.isValid()) c = opt.palette.color(QPalette::Dark);
opt.palette.setColor(QPalette::Text, opt.palette.color(QPalette::BrightText));
} else {
c = m_editorPrivate->calculatedBackgroundColor(m_editorPrivate->indexToBrowserItem(index));
@ -486,7 +488,11 @@ static QIcon drawIndicatorIcon(const QPalette &palette, QStyle *style)
void QtTreePropertyBrowserPrivate::init(QWidget *parent)
{
QHBoxLayout *layout = new QHBoxLayout(parent);
#if QT_VERSION_MAJOR >= 6
layout->setContentsMargins(0,0,0,0);
#else
layout->setMargin(0);
#endif
m_treeWidget = new QtPropertyEditorView(parent);
m_treeWidget->setEditorPrivate(this);
m_treeWidget->setIconSize(QSize(18, 18));

View File

@ -986,8 +986,13 @@ QtVariantPropertyManager::QtVariantPropertyManager(QObject *parent)
QtStringPropertyManager *stringPropertyManager = new QtStringPropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::String] = stringPropertyManager;
d_ptr->m_typeToValueType[QVariant::String] = QVariant::String;
#if QT_VERSION_MAJOR >= 6
d_ptr->m_typeToAttributeToAttributeType[QVariant::String][d_ptr->m_regExpAttribute] =
QMetaType::QRegularExpression; // int value for the type
#else
d_ptr->m_typeToAttributeToAttributeType[QVariant::String][d_ptr->m_regExpAttribute] =
QVariant::RegExp;
#endif
connect(stringPropertyManager, SIGNAL(valueChanged(QtProperty *, const QString &)),
this, SLOT(slotValueChanged(QtProperty *, const QString &)));
connect(stringPropertyManager, SIGNAL(regExpChanged(QtProperty *, const QRegExp &)),