Create a new Qt project (to go faster you can copy the source files of the first lab, then add them to the project). So far, the main difference with the previous project is that it will display a widget for drawing shapes instead of text in the central area.
For this purpose, you need to declare and implement a class (in new files .h and .cpp) that inherits from QWidget. For now this class will not do much: it will just have a proper constructor. The default size of a QWidget being null (as widgets' size is by default computed by considering the elements they contain), use the setMinimumSize() method to enforce an adequate size. Create an instance of this class, make it appear in the central area, then compile and test.
Modify your class so that the user can now draw a line interactively:
Modify your class and the application in order to make it possible to specify the color, the thickness and the style of the line before drawing it. Make it simple a this stage, for instance you can just provide a small set of colors to the user (e.g. in a menu or as a set of exclusive buttons).Note: Do not create as many slots as there are possible values (i.e. there should be one slot for changing the color, one for the thickness and one for the style). QActionGroup and QButtonGroup can help, and also allow making a group of actions or buttons exclusive (this is their default behavior but note that they can also be used for groups of non-exclusive items).
Modify your source code so that you can now either draw a line, a rectangle, or an ellipse interactively (the user will need to select which shape she wants to draw before drawing it)
Note:: have a look at the next question as you may want to do both simultaneously.
In the previous questions, the user could only draw one shape. The goal of this question is to make it possible to draw as many shapes as needed. Importantly, the user may wish to draw different shapes with different graphical attributes (e.g. a red line, then a blue ellipse).
The goal of this question is to allow editing the shapes that were previously drawn (by selecting, moving and resizing them, and changing their graphical attributes).
Note: Selecting shapes requires detecting if the mouse is located on the outline of the shape (or, possibly, inside the shape if the shape is closed). This operation is called picking and Qt classes such as QRect, QRectF, QPainterPath, etc. provides methods (intersects(), contains()) that helps this task (Incidentally, note that this is especially helpful when dealing with non trivial shapes such as bezier curves or shape combinations).
As in Lab #1, make sure that the user cannot exit the program without saving the data (see last question of Lab #1).
The goal of this question is to add a control panel to your user interface using Qt Designer. In this panel you will add widgets (e.g. sliders) for controlling graphical attributes in a more sophisticated way than in Step 3. The actual purpose of this step is to learn how to use Qt Designer and how to mix standard widgets classes with your own classes.
Following the same principle as in Lab #1, implement a "read" and a "save" slot that perform these operations and connect them to the appropriate buttons or menu items
Note: Qt objects, in particular QPen and QPainterPath are serializable, which ease this task.
Please follow the following instructions to avoid mistakes and undesirable problems: