treeitem.h

#ifndef TREEITEM_H
#define TREEITEM_H
 
#include <QTreeWidgetItem>
 
class TreeItem : public QTreeWidgetItem
{
   public:
      QObject * obj;
 
      TreeItem () : obj (nullptr) { }
};
 
#endif // TREEITEM_H

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QTreeWidget>
#include <QTableWidget>
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
 
private slots:
    void on_pushButton_clicked();
 
    void on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column);
 
private:
    Ui::MainWindow *ui;
 
    // #include <QTreeWidget>
    void showBranch (QTreeWidgetItem * target, QObject * obj);
    QTableWidgetItem * addLine (QString name, QString value);
};
 
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMetaProperty>
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::on_pushButton_clicked()
{
    setWindowIcon(QIcon::fromTheme("weather-clear"));
 
    QObject * p = ui->pushButton;
    while (p->parent() != nullptr)
        p = p->parent ();
 
    showBranch (ui->treeWidget->invisibleRootItem(), p);
    ui->treeWidget->expandAll ();
}
 
#include "treeitem.h"
 
void MainWindow::showBranch (QTreeWidgetItem *target, QObject *obj)
{
    TreeItem * branch = new TreeItem ();
    target->addChild (branch);
 
    const QMetaObject * cls = obj->metaObject();
    branch->setText (0, obj->objectName() + " : " + cls->className ());
    branch->obj = obj;
 
    for ( QObject * t : obj->children() )
        showBranch (branch, t);
}
 
QTableWidgetItem * MainWindow::addLine(QString name, QString value)
{
    int inx = ui->tableWidget->rowCount ();
    ui->tableWidget->setRowCount (inx +1);
 
    QTableWidgetItem * cell = new QTableWidgetItem ();
    cell ->setText (name);
    ui->tableWidget->setItem(inx, 0, cell);
 
    cell = new QTableWidgetItem ();
    cell ->setText (value);
    ui->tableWidget->setItem(inx, 1, cell);
 
    return cell;
}
 
void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)
{
   TreeItem * node = dynamic_cast < TreeItem * > (item);
   if (node != nullptr)
   {
       ui->tableWidget->clear ();
       ui->tableWidget->setColumnCount(2);
       ui->tableWidget->setRowCount(0);
 
       QObject * obj = node->obj;
       addLine ("object name", obj->objectName());
 
       const QMetaObject * cls = obj->metaObject();
       addLine ("class name", cls->className());
 
       int cnt = cls->propertyCount();
       for (int i = 0; i < cnt; i++)
       {
           QMetaProperty prop = cls->property (i);
           QVariant v = prop.read (obj);
           QTableWidgetItem * cell = addLine (prop.name(), v.toString());
           if (v.type() == QVariant::Icon)
               cell->setData (Qt::DecorationRole, v);
       }
 
   }
}
 
properties2019.txt · Last modified: 2019/10/29 17:14 by 147.32.6.116
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki