Hi all, during the holidays I found some time to work on the Python version of the DiagramScene example. It was quite an education :-) . I now have an almost working version that is a direct transposition of the C++ version from Qt 4.3.x. I will try to make it a bit more Pythonic now, and get the last details working properly. If anybody wants to comment, the current version is available at
http://ultr.vub.ac.be/~lieven/pyqt/diagramscene-1.tar.gz Most things seem to work properly, except that the "Bold" button keeps resetting all the time. I'm still looking into that. I made some notes on porting issues which I'll organise later. There is one problem with the original version which presents me with a bit of a dilemma. There appears to be a logic error in the C++ version. The function bool DiagramScene::isItemChange(int type) { foreach (QGraphicsItem *item, selectedItems()) { if (item->type() == type) return true; } return false; } returns true if _any_ item in the selectedItems() list matches the requested type, and functions like void DiagramScene::setLineColor(const QColor &color) { myLineColor = color; if (isItemChange(Arrow::Type)) { Arrow *item = qgraphicsitem_cast<Arrow *>(selectedItems().first()); item->setColor(myLineColor); update(); } } then go to work on the _first_ item in the list, which may or may not be of the right type. Because of this, it possible to crash the C++ version, for instance by selecting first a DiagramItem, adding a text item to the selection, and changing the font. The code then tries to call setFont(...) on a DiagramItem, which does not support this method. So I removed isItemChange, and replaced it with a getSelectedItemsByType function. Of course this means that the Python version is not an exact port any more. Best wishes for the new year, -- Dr. ir. Lieven Buts, Postdoctoral Fellow Structural Biology Brussels, Vrije Universiteit Brussel Department of Cellular and Molecular Interactions, VIB _______________________________________________ PyQt mailing list [email protected] http://www.riverbankcomputing.com/mailman/listinfo/pyqt
