#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QTableWidgetItem>
 
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
 
private slots:
    void on_pushButton_clicked();
    void on_table_itemChanged(QTableWidgetItem *item);
 
private:
    QObject * obj;
    bool ready = false;
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QApplication>
 
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
#include <QMetaObject>
#include <QMetaProperty>
#include <QTableWidgetItem>
 
void MainWindow::on_pushButton_clicked()
{
    obj =  ui->pushButton;
    const QMetaObject * cls =  obj->metaObject ();
    ui->pushButton->setText (cls->className());
 
    ready = false;
    int cnt = cls->propertyCount ();
    ui->table->setColumnCount (2);
    ui->table->setHorizontalHeaderLabels (QStringList () << "name" << "value");
    ui->table->setRowCount (cnt);
    for (int inx = 0; inx < cnt; inx++)
    {
        QMetaProperty prop = cls->property(inx);
        QString name = prop.name();
        QVariant value = prop.read (obj);
        QString text = value.toString();
 
        QTableWidgetItem * item = new QTableWidgetItem ();
        item->setText (name);
        ui->table->setItem (inx, 0, item);
 
        item = new QTableWidgetItem ();
        item->setText (text);
        ui->table->setItem (inx, 1, item);
    }
 
    ready = true;
}
 
void MainWindow::on_table_itemChanged(QTableWidgetItem *item)
{
    if (ready)
    {
        int inx = item->row();
        QString text = item->text ();
 
        const QMetaObject * cls =  obj->metaObject ();
        QMetaProperty prop = cls->property(inx);
 
        QVariant value (text);
        prop.write (obj, value);
    }
}
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
 
uop/qtproperties2.txt · Last modified: 2021/12/07 10:43 by 147.32.8.110
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki