#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();
}