Qt属性表QtTreePropertyBrowser的添加(编译方式建议用*.Pro)

Qt安装的时候选择源码,在安装目录下可以看到QtPropertyBrowser的文件。

利用模板,新建一个Qt Widgets Application 的工程。工程名任取,使用qmake构建

这里建议按默认的名称,要不和本博客后文对不上,得自己一个个对应修改。

在Qt工程的pro文件中加入上图中pri 文件的目录,比如我这里是

include(C:/Qt/Qt5.14.2/5.14.2/Src/qttools/src/shared/qtpropertybrowser/qtpropertybrowser.pri)

pri文件相当于一个库的配置文件,指定源码和头文件的位置,编译方式等。这里的作用是利用pri加载QtTreePropertyBrowser库供我们自己的程序使用。

在ui文件中拖入一个Widget控件,我这里命名为:propertyTree,右键promote to(提升为),Promoted class name:QtTreePropertyBrowser

 再在界面上添加两个按钮,一个作用是清除属性表,一个是重置属性表为初始值。

mainwindow.h

#pragma once

#include <QMainWindow>

#include <QDate>
#include <QLocale>
#include "qtpropertymanager.h"
#include "qtvariantproperty.h"
#include "qttreepropertybrowser.h"


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    QtVariantPropertyManager* m_pVarManager;
    QtVariantEditorFactory *m_pVarFactory;
    QMap<QtProperty*, QString> m_property_dic;

   private slots:
       void on_clear_pushButton_clicked();

       void on_pushButton_2_clicked();

   private:
       Ui::MainWindow *ui;

   private slots:
       void variantPropertyValueChanged(QtProperty* property, const QVariant &value);


};

mainwindow.cpp 

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);


    m_pVarManager = new QtVariantPropertyManager(ui->propertyTree);
    m_pVarFactory = new QtVariantEditorFactory(ui->propertyTree);
    
    connect(m_pVarManager, &QtVariantPropertyManager::valueChanged, this, &MainWindow::variantPropertyValueChanged);

    QtProperty *groupItem = m_pVarManager->addProperty(QtVariantPropertyManager::groupTypeId(),QStringLiteral("Group1"));

    QtVariantProperty *item = m_pVarManager->addProperty(QVariant::Int, QStringLiteral("Int: "));
    item->setValue(100);
    groupItem->addSubProperty(item);

    item = m_pVarManager->addProperty(QVariant::Bool,QStringLiteral("Bool: "));
    item->setValue(true);
    groupItem->addSubProperty(item);

    item = m_pVarManager->addProperty(QVariant::Double,QStringLiteral("Double: "));
    item->setValue(3.14);
    groupItem->addSubProperty(item);

    item = m_pVarManager->addProperty(QVariant::String,QStringLiteral("String: "));
    item->setValue(QStringLiteral("hello world"));
    groupItem->addSubProperty(item);

    QtProperty *groupItem1 = m_pVarManager->addProperty(QtVariantPropertyManager::groupTypeId(),QStringLiteral("Group2"));

    QtVariantProperty *item1 = m_pVarManager->addProperty(QVariant::Int, QStringLiteral("Int: "));
    item1->setValue(100);
    groupItem1->addSubProperty(item1);

    item1 = m_pVarManager->addProperty(QVariant::String,QStringLiteral("String: "));
    item1->setValue(QStringLiteral("hello world"));
    groupItem1->addSubProperty(item1);

    item1 = m_pVarManager->addProperty(QVariant::Color, QStringLiteral("Color: "));
    item1->setValue(QColor(255, 0, 0));
    groupItem1->addSubProperty(item1);

    item1 = m_pVarManager->addProperty(QtVariantPropertyManager::enumTypeId(), QLatin1String("Enum Property"));
    QStringList enumNames;
    enumNames << "Enum0" << "Enum1" << "Enum2";
    item1->setAttribute(QLatin1String("enumNames"), enumNames);
    item1->setValue(1);
    groupItem1->addSubProperty(item1);

    ui->propertyTree->addProperty(groupItem);
    ui->propertyTree->addProperty(groupItem1);
    ui->propertyTree->setFactoryForManager(m_pVarManager, m_pVarFactory);
}

MainWindow::~MainWindow()
{
    delete m_pVarManager;
    delete m_pVarFactory;

    delete ui;
}


void MainWindow::on_clear_pushButton_clicked()
{
    m_pVarManager->clear();
}

void MainWindow::on_pushButton_2_clicked()
{
    m_pVarManager = new QtVariantPropertyManager(ui->propertyTree);
    m_pVarFactory = new QtVariantEditorFactory(ui->propertyTree);

    connect(m_pVarManager, &QtVariantPropertyManager::valueChanged, this, &MainWindow::variantPropertyValueChanged);

    QtProperty *groupItem = m_pVarManager->addProperty(QtVariantPropertyManager::groupTypeId(),QStringLiteral("Group1"));

    QtVariantProperty *item = m_pVarManager->addProperty(QVariant::Int, QStringLiteral("Int: "));
    item->setValue(100);
    groupItem->addSubProperty(item);

    item = m_pVarManager->addProperty(QVariant::Bool,QStringLiteral("Bool: "));
    item->setValue(true);
    groupItem->addSubProperty(item);

    item = m_pVarManager->addProperty(QVariant::Double,QStringLiteral("Double: "));
    item->setValue(3.14);
    groupItem->addSubProperty(item);

    item = m_pVarManager->addProperty(QVariant::String,QStringLiteral("String: "));
    item->setValue(QStringLiteral("hello world"));
    groupItem->addSubProperty(item);

    QtProperty *groupItem1 = m_pVarManager->addProperty(QtVariantPropertyManager::groupTypeId(),QStringLiteral("Group2"));

    QtVariantProperty *item1 = m_pVarManager->addProperty(QVariant::Int, QStringLiteral("Int: "));
    item1->setValue(100);
    groupItem1->addSubProperty(item1);

    item1 = m_pVarManager->addProperty(QVariant::String,QStringLiteral("String: "));
    item1->setValue(QStringLiteral("hello world"));
    groupItem1->addSubProperty(item1);

    item1 = m_pVarManager->addProperty(QVariant::Color, QStringLiteral("Color: "));
    item1->setValue(QColor(255, 0, 0));
    groupItem1->addSubProperty(item1);

    item1 = m_pVarManager->addProperty(QtVariantPropertyManager::enumTypeId(), QLatin1String("Enum Property"));
    QStringList enumNames;
    enumNames << "Enum0" << "Enum1" << "Enum2";
    item1->setAttribute(QLatin1String("enumNames"), enumNames);
    item1->setValue(1);
    groupItem1->addSubProperty(item1);

    ui->propertyTree->addProperty(groupItem);
    ui->propertyTree->addProperty(groupItem1);
    ui->propertyTree->setFactoryForManager(m_pVarManager, m_pVarFactory);
}


void MainWindow::variantPropertyValueChanged(QtProperty *property, const QVariant &value)
{
    QString str = m_property_dic[property];

    //    qDebug()<<str<<": "<<value<<": "<<value.type();
    QString str_output=str + ": " + value.toString() + ": " + value.type();
    ui->statusbar->showMessage(str_output, 8000);
}

在进行Qt的.pro文件交叉编译时,可以按照以下步骤进行操作: 1. 首先,使用git命令下载Qt源码库。可以使用以下命令进行下载: ``` cd ~ git clone git://code.qt.io/qt/qt5.git -b 5.9 ``` 2. 进入下载的qt5目录,并执行init-repository命令进行初始化: ``` cd qt5/ ./init-repository ``` 3. 如果不想使用git下载源码库,可以使用qt5.tar.gz文件进行编译。将qt5.tar.gz文件解压到指定目录,可以使用以下命令: ``` cd rpi tar zxvf qt5.tar.gz -C ~/ ``` 4. 在.pro文件中使用include(filename)语法将其他.pro文件添加进来,以便进行交叉编译。 5. 在.pro文件中使用DEFINES += GALLERYCORE_LIBRARY来定义编译标志,以告诉编译器何时应该导入或导出库的符号。 6. 在.pro文件中使用Qt提供的语法糖gallery-core_global.h,使用Q_DECL_EXPORT宏来使符号变为public可见,以便在编译库时使用。 7. 如果需要编译静态库,需要注意以下两点: - 静态库会增加编译时间,每次库有修改都需要重新编译。 - 静态库会更紧密地耦合,每个应用程序都必须嵌入此静态库,而不能链接到此库。 8. 在.pro文件中可以定义变量,并使用message()函数输出编译时的信息。例如,在Windows平台上编译时可以使用以下代码: ``` COMPILE_MSG = "Compiling on" windows { # 编译框输出 Project MESSAGE: Compiling on windows message($$COMPILE_MSG windows) } ``` 这些步骤可以帮助你进行Qt的.pro文件交叉编译。请根据你的具体需求和环境进行相应的配置和操作。 #### 引用[.reference_title] - *1* [树莓派+Qt5.9.9 交叉编译](https://blog.csdn.net/yutao1131/article/details/121135192)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [qt .pro文件 qmake编译过程](https://blog.csdn.net/qq_33373173/article/details/129445702)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yaked19

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值