Ok ,so it seems that it is possible to draw a custom checkbox which is visible at all times using a custom delegate.
But i am still confused as to how to implement a custom painted checkbox which will be visible at all times. My current code has the normal checkbox working using Qt::CheckStateRole as you suggested earlier. Now, if i want to add custom drawing to it, what should i do?

Suppose, i write a custom delegate to display a checkbox at all times. So, i'll rewrite the paint function of the delegate to display a virtual checkbox at all times. In addition, to support editing of the checkbox (check/uncheck) by the user, i need to rewrite the createEditor(), setEditorData() and setModelData() functions in the custom delegate.

So, when the application runs, user will see a virtual checkbox because of the paint() function of the custom delegate and if the user clicks the checkbox, the delegate should go into edit mode and have a real checkbox.

Is the above understanding correct? If i implement the above stuff, i would have to remove the Qt::CheckStateRole code as it will no longer be used.

I am still confused...