When you write a program for Microsoft Windows, you do it with technologies Microsoft made for that purpose. It is convenient, fast, and reliable. You get a program that integrates well with the Windows environment and less troubleshooting for your effort compared to doing it another way. When you write a program for the Apple environment, you follow the same path. The problem comes when you have written all your programs for the one and now want to use the other, you have no clean portability. Even if you stay on the same technology track, the new versions of tools and environments from the same company can change radically spoiling your investments.
Write your programs in such a way that they are not specific to these environment and you gain greater longevity for your effort. Doing things the platform specific way does make for a better program. Runs faster, more reliably, and less testing. You have to weigh the cost to integrate versus sustain over the long-term. Cross-platform is the way in the latter case.
Qt and Java SWT are going to be your two best solutions for cross-platform technology. There is a copyright cloud of doubt around Java that could sink the fortunes of Android, Google, and the overall enthusiasm for community support of Java. Qt has none of that and would be preferrable. Qt would also grant you far greater capability in theory though Java would be easier to use.
Other tools exist such as wxWidgets, GTK#, GTK+, and many others. Qt requires you make an either or choice for commercial or none-commercial use and on that basis, using the other choices would be recommended. If you are 100% certain which way you go however, go Qt. You can also do your own thing such as put together a thin wrapper over a program tool kit. I show an example of this last approach.