Hi,
It's a good idea to first understand when you want a class and when you don't. If you a common set of operations that need to save and share state between them, and you have at least 2 of these operations, then you might need a class. On the other hand, if you only want to save state, or you only have a single operation, then you probably want a dict.
When you decide to write a class, you want it to have a single responsibility. Then you figure out first and foremost what your public interface should be. What are the methods you want other people to call if they create an instance of your class? Ideally you would expose the least amount of public methods possible, which will make your class more encapsulated and easier to maintain. Same goes for public vs private attributes.
Another good suggestion is not to go crazy with classes and inheritance. That is, don't try and create a big type hierarchy upfront based on what you think you will need. Best to just design exactly what you need for a concrete use, and then to refactor later when you need to introduce abstractions.
Specifically on the topic of Qt... I said something similar in my Python/Qt training videos, that Qt is really heavy on the concept of classes. Pretty much everything deals with types and subtypes, so it would be a good idea to get comfortable with classes first. It isn't required though, and you will learn a lot by playing with Qt anyways. It just means your first class structures might be a total mess :-)
The main goal is to create nice clean interfaces in your classes to hide away the private details and make each piece kind of a black-box component. It will help with reusability.
Justin