#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include 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 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } #include #include #include 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(); }