#ifndef BLOCK_H #define BLOCK_H #include #include class Block : public QObject { Q_OBJECT public: explicit Block(QObject *parent = 0); signals: public slots: void go (int x, int y) { r->moveBy (x, y); } public: QGraphicsRectItem * r; }; #endif // BLOCK_H #include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include #include #include "block.h" QGraphicsScene * scene; Block * block; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); scene = new QGraphicsScene; ui->graphicsView->setScene(scene); scene->addLine(0, 0, 120, 120); QGraphicsRectItem * r = new QGraphicsRectItem; r->setRect(10, 10, 200, 100); r->setPen (QColor ("red")); r->setBrush (QColor ("cornflowerblue")); scene->addItem (r); block = new Block; block->r = r; display (this ); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_actionRun_triggered() { QScriptEngine e; QScriptEngineDebugger debugger; debugger.attachTo (&e); QMainWindow * debugWindow = debugger.standardWindow (); debugWindow->resize (1024, 640); QScriptValue infoObject = e.newQObject (ui->output); e.globalObject().setProperty ("info", infoObject); e.globalObject().setProperty ("win", e.newQObject (this)); e.globalObject().setProperty ("block", e.newQObject (block)); e.evaluate (ui->input->toPlainText()); } #include void MainWindow::display (QObject * obj) { const QMetaObject * cls = obj->metaObject(); int n = cls->propertyCount(); ui->tableWidget->setColumnCount(n); ui->tableWidget->setRowCount(n); for (int i = 0; i < n; i++) { QMetaProperty p = cls->property (i); QTableWidgetItem * label = new QTableWidgetItem; label->setText(p.name()); ui->tableWidget->setItem (i, 0, label); } }