window.h

class MainWindow
{
    /* ... */
public:
    static MainWindow * instance;
    void updateTree ();
private:
    void updateBranch (QTreeWidgetItem *branch, QGraphicsItem *item);
 
    void addLine(QString name, QVariant value);
    void updateTable (QGraphicsItem * item);
 
};
 
void refreshTree ();
 
class TreeItem : public QTreeWidgetItem
{
public:
    QGraphicsItem * shape;
};

window.cc

MainWindow * MainWindow::instance = NULL;
 
void refreshTree ()
{
    if (MainWindow::instance != NULL)
        MainWindow::instance->updateTree ();
}
 
void MainWindow::updateBranch (QTreeWidgetItem * branch, QGraphicsItem * item)
{
    TreeItem * node = new TreeItem;
    node->shape = item;
    QString s = "item";
    if (dynamic_cast <Rectangle*> (item) != NULL)
        s = "rectangle";
    else if (dynamic_cast <Ellipse*> (item) != NULL)
        s = "ellipse";
    node->setText (0, s);
    QAbstractGraphicsShapeItem *shape = dynamic_cast <QAbstractGraphicsShapeItem *> (item);
    if (shape != NULL)
    {
       node->setForeground (0, shape->pen().color());
       node->setBackground (0, shape->brush().color());
    }
    branch->addChild (node);
 
    for (QGraphicsItem * t : item->childItems())
        updateBranch (node, t);
}
 
void MainWindow::updateTree()
{
    ui->tree->clear ();
    QTreeWidgetItem * branch = ui->tree->invisibleRootItem();
    for (QGraphicsItem * item : scene->items ())
    {
        if (item->parentItem() == NULL)
            updateBranch (branch, item);
    }
    ui->tree->expandAll();
}
 
void MainWindow::on_tree_itemDoubleClicked (QTreeWidgetItem *item, int column)
{
    TreeItem * t = dynamic_cast <TreeItem *> (item);
    if (t != NULL)
    {
        for (QGraphicsItem * s : scene->selectedItems())
            s->setSelected (false);
        t->shape->setSelected (true);
        updateTable (t->shape);
    }
}
 
void MainWindow::addLine (QString name, QVariant value)
{
   int n = ui->prop->rowCount();
   ui->prop->setRowCount (n+1);
 
   QTableWidgetItem * t = new QTableWidgetItem;
   t->setText (name);
   ui->prop->setItem (n, 0, t);
 
   t = new QTableWidgetItem;
   t->setText (value.toString());
   ui->prop->setItem (n, 1, t);
}
 
void MainWindow::updateTable (QGraphicsItem * item)
{
    ui->prop->setRowCount(0);
    ui->prop->setColumnCount(2);
    ui->prop->setHorizontalHeaderLabels (QStringList() << "name" << "value");
    addLine ("x", item->x());
    addLine ("y", item->y());
}

shape.cc

void shapeDrop (QAbstractGraphicsShapeItem * shape, QGraphicsSceneDragDropEvent *event)
{
   const QMimeData * data = event->mimeData();
   if (data->hasColor())
   {
       /* ... */
       refreshTree (); /* <--- */
   }
   if (data->hasFormat (shape_format))
   {
       /* ... */
       refreshTree (); /* <--- */
   }
}
 
shape_2019.txt · Last modified: 2019/04/02 14:57 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