Qt4.7.4 に戻しました
http://d.hatena.ne.jp/QtCoder/20140710 (Qt5 に差し替えました
一ヶ月前、Qt5化したアプリケーションを公開したのですが、あまりにトラブルが多いので、結局 Windows/Mac版ともに Qt4.7.4 に戻しました。スーパーハッカーじゃないので、原因の分からないトラブルに弱いんです……。
「Qt5版になってから起動しなくなった」というWindowsユーザーの問題も解消したようですし(当然ですが)、ほっとしています。
Qt5でプリンタを取得できない事がある
QPrinterInfo pi = QPrinterInfo::defaultPrinter(); if (pi.isNull()) { // プリンタを取得できない QMessageBox::warning( this, "", "", QMessageBox::Ok ); return; }
以上のコードで、Qt4.7.4では概ねプリンタを取得できていましたが、Qt5だとプリンタを取得できない事があるようです。手元の環境だと問題ないのですが……。
Mac OS X 10.7 (Lion) だと落ちる
バグなのかよく分かりませんが、Qt5.3.1 で開発しているアプリケーションの、DockWidgetのタイトルバーを何度かダブルクリックすると(ドッキングしたり解除したりを繰り返す)、
Application Specific Information: objc_msgSend() selector name: mouseUp: objc[77628]: garbage collection is OFF Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 libobjc.A.dylib 0x00007fff8b1b8e8c objc_msgSend + 12 1 libqcocoa.dylib 0x0000000103ef5689 0x103ee8000 + 54921 2 com.apple.AppKit 0x00007fff892c93a5 -[NSApplication sendEvent:] + 5593 3 libqcocoa.dylib 0x0000000103f0b09e 0x103ee8000 + 143518 4 com.apple.AppKit 0x00007fff8925fa0e -[NSApplication run] + 555 5 libqcocoa.dylib 0x0000000103f07854 0x103ee8000 + 129108 6 QtCore 0x000000010229e93d QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 381 7 QtCore 0x00000001022a1e77 QCoreApplication::exec() + 359
というエラーを吐いて落ちます (ログを見ても原因が分かりません)。
ちなみに、10.9 (Marvericks) だと落ちません。Qt4.7.4 でビルドしても落ちません。どうしたものか…。
MainWindow::closeEvent が二回呼ばれる
バグなのか仕様なのか、よく分かりませんが、Mac版のQt5.3.0 で、
- 赤いボタンでアプリケーションを閉じると、closeEventは1度しか呼ばれない
- メニューから "Quit Hoge(アプリ名)" を実行すると、closeEventが2度呼ばれる
同じ悩みを抱えてる人はいないだろうか……これか!?
https://bugreports.qt-project.org/browse/QTBUG-39398 (Regression: closeEvent called twice
Qt5.3.1 では修正された、ってことですかね?
補足
Qt5.3.1で修正されてました
Win32でフォントを列挙する (QtでWin32 API を使う)
int gFontCount = 0; int CALLBACK EnumFontProc( ENUMLOGFONTEX* lpelf, NEWTEXTMETRIC* lpntm, DWORD fontType, LPARAM lParam ) { gFontCount++; Widget* widget = (Widget*)lParam; widget->setWindowTitle( QString::number(gFontCount) ); std::wstring ws = &lpelf->elfLogFont.lfFaceName[0]; return TRUE; } Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); LOGFONT lf; memset( &lf, 0, sizeof(lf) ); lf.lfCharSet = ANSI_CHARSET; EnumFontFamiliesEx( getDC(), &lf, (FONTENUMPROC)EnumFontProc, (LPARAM)this, 0 ); }
さてビルドだ!……と行きたい所ですが、"undefined reference to EnumFontFamiliesExW@20" とコンパイルエラーが出てしまいます。EnumFontFamiliesEx は gdi32.lib なので、*.pro ファイルに、
win32:LIBS += -lgdi32
を追加すればOK。前にもWin32使った事があったのに、忘れてた…。
FireAlpaca を Qt5 に差し替えました
http://firealpaca.com/beta (FireAlpaca Beta研究室
日本 Qtユーザー会の皆様に助けて頂きながら、FireAlpacaのライブラリを Qt4.7.4 から Qt5.3.0 に差し替える事ができました。ありがとうございました。まだ正式版ではないですが、お試し頂ければ幸いです。