If you're building an application that will run on Windows, it should look, feel and behave like a standard Windows application. If you're building an application that will run on some flavor of *nix, it should look, feel and behave like a standard application for that flavor (Gtk, KDE, X/Motif... whatever). If you're building a command line application for a given platform, it should take look, feel and behave like a standard CLI app for that platform (argument styles, argument names, output destination... whatever). Etc. etc. etc.
Why? Because when using a certain system, one expects applications to look, feel and behave a certain way. Accordingly, you expect to start them up and put them to work. When they don't look, feel and behave like the other applications that run on that system, however, you are forced to focus on the application's interface rather than on its functionality. This makes the application more difficult to use, which makes it less functional, less useful and ultimately less desirable.
So put away those spiffy widget sets and the customized controls, and stick to what everybody's used to. Your customers may not thank you for it, but your potential customers will notice if you don't.
Why? Because when using a certain system, one expects applications to look, feel and behave a certain way. Accordingly, you expect to start them up and put them to work. When they don't look, feel and behave like the other applications that run on that system, however, you are forced to focus on the application's interface rather than on its functionality. This makes the application more difficult to use, which makes it less functional, less useful and ultimately less desirable.
So put away those spiffy widget sets and the customized controls, and stick to what everybody's used to. Your customers may not thank you for it, but your potential customers will notice if you don't.