Dialog используется для диалоговых окон.
Frame обычно для плейсхолдеров.
The QFrame class can also be used directly for creating simple placeholder frames without any contents.
Widget — вообще базовый класс для всех окон (элементов управления).
На практике — берите тот, который нужен для каждой конкретной цели: главное окно — QMainWindow, нужен список — QListWidget, нужна кнопка — QPushButton. А уж какой там класс от чего наследуется — дело внутренней реализации. Ну и особняком тут конечно стоит класс диалога — он ессно нужен для диалогов.