Back end in portable C or C++. Front end using the native OS GUI features. Compile separately for each platform. Many developers may not be a fan of this, but it's the best kind of cross platform for the users. If you need something of heirloom quality on the front-end it's the way to go.
But if front-end GUI widgets literally are your app or a high % of it, then this falls apart. You're basically maintaining 3 separate apps at that point.