Qt SDK 1.1 RC リリース

この記事は Qt Blog の ”Qt SDK 1.1 RC released” を翻訳したものです。
執筆: Maurice Kalinowski 2011年4月6日

2011年4月6日、Qt SDK 1.1 リリース候補版がリリースされました。このリリースは、数週間前に リリースしたベータ版 を経て、Qt SDK 1.1 正式版へと至る最後のステップとなります。Qt SDK の正式版では Qt 4.7 ベースのアプリケーションを Ovi Store への登録が可能になります。

ベータ版からの主要な改善点を以下に示します。

  • Symbian およびデスクトップ向けの Qt 4.7.3
  • Qt Mobility を 1.1.2 へ更新
  • Qt Assistant を独立したパッケージとして追加(開発者からの要望に応えて)
  • Linux 版のインストーラがシステムの Proxy を利用
  • Notification API(通知 API)が experimental から "Additional API"(追加 API)へ移動
  • Qt Simulator のバグ修正
  • インストール/アップデートフローの改善

S60 3rd Edition では Qt 4.7 がサポートされないことを説明する この重要な記事 を確認してください。それらの環境をターゲットととする Qt アプリケーションを開発する場合には Qt 4.6 を使用してください。

最後に、リリース候補版を試す方々向けに、直接パッケージをダウンロードできるリンクを以下に示します:

プラットフォーム オンラインインストーラー オフラインインストーラー
Microsoft Windows 15MB 1,5GB
Linux 32bit 23MB 687MB
Linux 64bit 23MB 690MB
Mac OS-X 12MB 680MB

Forum Nokia のページからもダウンロードできます。

いつものように、フィードバックは大歓迎です。何か問題に遭遇したり、共有したい提案やアイデアがあればバグトラッカー( http://bugreports.qt.nokia.com )に登録してください。この記事にコメントの形でバグ報告やフィードバックを頂いても、見逃したり、ご期待に添えられるような扱いが出来るとは限りません。必ずバグトラッカーを使用してください。 :)


Blog Topics:

Comments

?
Thomas
0 points
191 months ago

Implement your own, for what ever reasons you like, but be polite and admit that QScopedPointer is not the novelty your original blog entry implied. QScopedPointer might be a nice implementation, but it has nothing we haven't seen before in terms of API. It's basically boost::scopedptr with some nice binary properties and custom deleter functionality, just as we all know it from boost::sharedptr. Also, Thiagos comment bashing boost's API as awful is misplaced with regard to boost::sharedptr and boost::scopedptr which are both straight-forward to use.

?
anon
0 points
191 months ago

@Thomas: So it's just a non-novel thing, it just is novel? :-P

I mean, C++ is really non-novel, it didn't really bring anything we hadn't seen anywhere else.

?
Leo S
0 points
191 months ago

@thomas. Speak for yourself. This is going to very useful for me to have in Qt directly. Boost does have an awful API, and it's another dependency that's a big pain in the ass to compile on windows. I'll be very glad to toss it in favour of a nicer Qt solution.

?
Hoang Vu
0 points
191 months ago

If for some reasons you can't use what is implemented in Boost and have to implement your own, I accept it. But saying that you do it because you don't like the API is something else. There is nothing wrong with the Boost API. It's accepted into the C++0x standard. If integration is hard, re-implementing some features is acceptable. I think it's natural and there's no point in bashing the library you take the idea from.
@ Leo: if you don't know how to compile boost, there's the boostrap exe in the boost directory. Just run it and then run bjam, it will build boost for you.

?
comment
0 points
191 months ago

"binary compatibility"

And now please a big blog about why is binary compatibility is so important!

Who uses it? Who requires it? Why is it so bad to break binary compatibility in a Y.X++ (4.5->4.6) change?

boost does not support binary compatibility, and I've never heard that this is a showstopper to use boost.

To always cry "binary compatibility!" looks a little bit manic to me.

?
Philippe
0 points
191 months ago

@Thomas, boost is not the mother of all. Ideas implemented in boost come from various old sources. In the case of auto ptr, going back up to the dtor concept!
Personally, I certainly don't want to depend on boost, hence I understand Qt's concerns.
And on the hand, well integrated and elegant refinements of known concepts, and very welcome.
I wish the same could be done in certain other parts of Qt...

?
Thomas
0 points
191 months ago

@everyone disagreeing with me above: I don't mind that Qt implements its own QScopedPointer, I don't even disagree with it, I just found the first QScopedPointer blog entry seriously annoying because it completely failed to mention that QScopedPointer isn't some novel new idea conceived in the Qt offices.

?
Stuart Dootson
0 points
191 months ago

The one thing you've added to your scoped pointer is the one thing I wish Boost's had - custom deletion. Would be extremely useful for GDI handle wrappers in Windows, things like that, where instead, I wrote my own custom class. Still, not too much hassle.

'Boost has an awful API' - can't agree with that. Different to Qt, but not awful'

'Boost ... [is] a big pain in the ass to compile on windows' - really? Can't say I've ever had any problems with it. Just invoke bjam with the correct parameter set (and that's just telling it what toolset to use, where to stick the libraries and to build all variants) and you're done. OR you could use the installer @ BoostPro (http://www.boostpro.com/dow...) if that's too difficult.

?
Razvan Petru
0 points
191 months ago

Why the fuss? No one is forced to use Qt or boost pointers.

P.S: I would rather have a blog post that announces the new version of Qt Creator than posts about pointers :D

?
Paul Gideon Dann
0 points
191 months ago

@Razvan => Pointers are fun! :)

I've loved the concept of RAII ever since reading "Effective C++" (Scott Meyers). I was disappointed to find no scoped pointer class in Qt, and I started using shared_ptr from TR1 instead. QScopedPointer sounds like a great improvement. Just having a Qt class to do the job will make the code more consistent. I'm really excited about using it. Great job!

To me, code and API consistency is pretty important. In a Qt app, I'd rather use a Qt class to do RAII. If I were using the STL, Boost would be a better fit. Qt and Boost obviously have very different approaches to their API. It's silly to quarrel over which is better -- they clearly appeal to different people.

?
Esben Mose Hansen
0 points
191 months ago

Compiling the ForwardDeclarion example (with a few lines to make it a validish program) gives me

/usr/include/c++/4.3/backward/autoptr.h: In destructor 'std::autoptr::~auto_ptr() [with Tp = ForwardDeclared]':
test.cpp:7: instantiated from here
/usr/include/c++/4.3/backward/auto
ptr.h:173: note: neither the destructor nor the class-specific operator delete will be called, even if they are declared when the class is defined.

So that bit of scoped_ptr sorry QScopedPointer certainly isn't new :)

(But yes, it is nice to avoid a new dependency on windows.)

And about binary compability: The boost way of doing things is a major hazzle for distributions. It means that you need to have boost-x.1 boost-x.2 and boost-x.3 installed side-by-side with almost identical libraries since application packages needs to depend on one specific version.

BTW: Your blog sucks! :) No openid support, and the captcha uses O and 0!

?
Harald Fernengel
0 points
191 months ago

Ok, I admit it: Qt is no novelty, there have been UI toolkits before.

QScopedPointer is no novelty, there have been smart pointers before. I just got a bit overexcited because we've put a lot of love in QScopedPointer, so in my biased opinion, it's the scoped pointer to rule them all :)

?
Thomas Berg
0 points
191 months ago

@comment, who said:
> Who uses it? Who requires it? Why is it so bad to break binary compatibility in a Y.X++ (4.5->4.6) change?

Oh, so just because you don't need it, nobody else does? ;-)

Well for my company it is extremely useful. We have many binary packages that we have to build / maintain for four different platforms, and several of them are linked to Qt. It would cost days of extra work every time we upgraded if all of them had to be rebuilt against each new Qt version.

?
comment
0 points
191 months ago

@comment, who said:
> Who uses it? Who requires it? Why is it so bad to break binary compatibility in a Y.X++ (4.5->4.6) change?

I could remember a KDE upgrade (4.2 with Qt 4.4/5?) where all the binary compatibility does not help, because the new version has fixed too much bugs and all the workarounds haven't worked any more.

I assume in no serious Qt product process one blindly relies on the binary compatibility and just do a Y.X++ update by simply replacing the shared Qt libraries, I'm sure this will make to much trouble.
For a Y.X.Z++ upgrade it will be ok, but for a X.Y++ upgrade you need a complete QA cycle, then a new compilation of all relevant parts wouldn't hurt that much.

?
Thiago Macieira
0 points
191 months ago

@comment: you should always do QA. Qt does its best to maintain behaviour compatibility, but some things break. Especially when you're using novel functionality which isn't hardened yet -- or when you're exploiting undocumented features in Qt. KDE does that a lot.

In any case, you're thinking of the Qt 4.5 upgrade and KDE 4.2. Tell me, how many of your projects are the size of KDE?

But the fact that you have to do QA doesn't mean that binary compatibility isn't necessary. For smaller applications, the upgrade is very straight-forward. Without binary compatibility, the upgrade becomes very difficult, if not impossible.

?
Thiago Macieira
0 points
191 months ago

@Thomas: I never bashed Boost API. Quite to the contrary, I said they have lots of cool ideas. I also made a statement of fact that their API style is differnt from Qt's style.

And I stated my opinion that I find their API horrible. I'm allowed to have my opinion.

?
ettrich
0 points
191 months ago

@harald

Harald, you've made yourself guilty of writing some free code, and made it worse by telling others that you actually like your implementation. I'm not sure what the minimum sentence for such a crime in the so-called community is, I think you'll might get away with just around 16 hate mails or blog comments :-D

?
Nils
0 points
191 months ago

@harald: I like your pointer. It's a good pointer. And btw I like it when you can control when memory is released. In GC i don't trust.

?
AlekSi
0 points
191 months ago

I'm with Matthias. No-one force anyone to use Boost or Qt. For me the biggest problem that both Qt and Boost APIs are nice (both, really!) but looks differently. Well, C++ doesn't enforce code style like some other languages, use what you like more.

Harald, Thiago, Matthias, other friendly trolls, boost people - thanks for great code.

?
hugo
0 points
190 months ago

This is a sugestion:

You could rename the cleanup handlers QScopedPointerDeleter, QScopedPointerArrayDeleter, QScopedPointerPodDeleter -
QPointerDeleter, QPointerArrayDeleter and QPointerPodDeleter reespectively. This way you could use the cleanup handlers in more than one class, and I would be able to use it in my own classes avoiding the confusion with name QScoped*