X99-AにUSB2.0機器をつなぐとWindows7が起動しない問題

ASUSのマザーボードX99-AのUSB2.0ポートに何かつないでいると、Windows7の起動途中でフリーズすることがあります。

EHCI Legacy Support の設定を Disabled にすると、不具合が解消することがあります。

x99a

カテゴリー: 不具合対策, 備忘録 | コメントをどうぞ

Windowsで名前解決がおかしい問題

名前とIPアドレスのキャッシュにおかしな値が残っている場合があります。Windowsにはインターネットで使うDNSとWindowsネットワークで使うNetBIOS名があるので、両方のキャッシュをクリアする必要があるかもしれません。

DNSキャッシュをクリアする

C:\>ipconfig /flushdns

NetBIOS名キャッシュをクリアする

C:\>nbtstat -R

カテゴリー: 未分類 | コメントをどうぞ

QPlainTextEditでドラッグアンドドロップ編集を無効化する方法

マウスボタンが押されたら、基底クラスが処理するより前に、選択を解除します。

void MyPlainTextEdit::mousePressEvent(QMouseEvent *e)
{
    QTextCursor c = textCursor();
    c.setPosition(c.selectionEnd());
    setTextCursor(c);
    QPlainTextEdit::mousePressEvent(e);
}
カテゴリー: 未分類 | コメントをどうぞ

クラス内宣言時初期化のバグ

Visual Studio 2013 で以下のようなコードを実行すると、おかしな値が表示されます。

#include <stdio.h>

struct Hoge {
    struct {
        double value = 123;
    } data;
};

int main(int argc, char **argv)
{
    Hoge hoge;
    printf("%f\n", hoge.data.value);
    return 0;
}

構造体の中に無名構造体があって、その中で宣言時初期化を記述しています。

内側の構造体が、無名ではなく、名前を付けると、期待通りに動作します。

Visual Studio 2015 では修正されているようです。

 

カテゴリー: 未分類 | コメントをどうぞ

Qt5.6 static がコンパイルできない

Debian GNU/Linux 8 (jessie) で、Qt5.6 SDK(スタティックリンク版)を作ろうとしています。

最初にXCB関係のパッケージをインストールしておきます。

apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync0-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-xinerama0-dev

qt-everywhere-opensource-src-5.6.0.tar.gz を展開してから、下記のようにconfigureします。

./configure -static -nomake examples -prefix /opt/Qt5.6.0-static

終わったらmakeします。同じ手順で、Qt5.5.1なら成功するのですが、Qt5.6.0だと次のようなエラーが出ます。

g++ -c -pipe -O2 -std=c++1y -fno-exceptions -Wall -W -D_REENTRANT -fPIC -DQT_NO_MTDEV -DQT_NO_LIBUDEV -DQT_NO_TSLIB -DQT_NO_LIBINPUT -DQT_NO_XKB -DQT_QML_DEBUG_NO_WARNING -DQT_USE_QSTRINGBUILDER -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -I../../include -I../../include/QtQml -I/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtbase/include -I/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtbase/include/QtNetwork -I/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtbase/include/QtCore/5.6.0 -I/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtbase/include/QtCore/5.6.0/QtCore -I/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtbase/include/QtWidgets -I/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtbase/include/QtGui -I/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtbase/include/QtCore -I.moc -I/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtbase/mkspecs/linux-g++ -o .obj/moc_conf.o .moc/moc_conf.cpp
g++ -Wl,--gc-sections -Wl,-O1 -fuse-ld=gold -Wl,--enable-new-dtags -o ../../bin/qml .obj/main.o .obj/qml_qml_plugin_import.o .obj/qml_plugin_import.o .obj/qrc_qml.o .obj/moc_conf.o   -L/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtdeclarative/lib -L/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtbase/lib -lQt5Widgets -L/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtdeclarative/plugins/qmltooling -lqmldbg_debugger -lqmldbg_local -lqmldbg_native -lqmldbg_profiler -lqmldbg_server -lqmldbg_tcp -lQt5Qml -L/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtbase/plugins/bearer -lqconnmanbearer -lqgenericbearer -lqnmbearer -lQt5Network -L/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtbase/plugins/platforms -lqxcb -lQt5XcbQpa -lX11 -lX11-xcb -lXi -lxcb-render-util -lxcb-render -lxcb -lxcb-image -lxcb-icccm -lxcb-sync -lxcb-xfixes -lxcb-shm -lxcb-randr -lxcb-shape -lxcb-keysyms -lxcb-xinerama -lQt5PlatformSupport -lfontconfig -lfreetype -lQt5DBus -L/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtimageformats/plugins/imageformats -lqdds -lqicns -lqtga -lqtiff -lqwbmp -lqwebp -L/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtbase/plugins/imageformats -lqico -lQt5Gui -lpng -lqtharfbuzzng -lQt5Core -lz -lqtpcre -lm -ldl -lrt -lpthread
/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtdeclarative/lib/libQt5Qml.a(qqmldebugconnector.o):qqmldebugconnector.cpp:function _GLOBAL__sub_I_qqmldebugconnector.cpp: error: undefined reference to 'qt_static_plugin_QQmlInspectorServiceFactory()'
collect2: error: ld returned 1 exit status
Makefile:93: recipe for target '../../bin/qml' failed
make[3]: *** [../../bin/qml] Error 1
make[3]: Leaving directory '/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtdeclarative/tools/qml'
Makefile:96: recipe for target 'sub-qml-make_first' failed
make[2]: *** [sub-qml-make_first] Error 2
make[2]: Leaving directory '/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtdeclarative/tools'
Makefile:70: recipe for target 'sub-tools-make_first' failed
make[1]: *** [sub-tools-make_first] Error 2
make[1]: Leaving directory '/home/soramimi/a/qt-everywhere-opensource-src-5.6.0/qtdeclarative'
Makefile:324: recipe for target 'module-qtdeclarative-make_first' failed
make: *** [module-qtdeclarative-make_first] Error 2

qqmldebugconnector.cpp が参照している qt_static_plugin_QQmlInspectorServiceFactory() が定義されていない、ということのようですが、この対策方法はあるでしょうか?

カテゴリー: 未分類 | 3件のコメント

BigQlock

Raspberry Pi向け、時計アプリを開発中です。

bigqlock

元は、Palm OS用のBigClockというアプリです。もうちょっとできてきたらソース公開します。

http://www.soramimi.jp/bigqlock/

カテゴリー: 未分類 | コメントをどうぞ

Windowsで実行中のOSが64ビットか確認する方法

備忘録です。

bool is64()
{
    void (WINAPI *fn_GetNativeSystemInfo)(LPSYSTEM_INFO lpSystemInfo);
    HMODULE hm = LoadLibrary(L"kernel32");
    (FARPROC &)fn_GetNativeSystemInfo = GetProcAddress(hm, "GetNativeSystemInfo");
    if (fn_GetNativeSystemInfo) {
        SYSTEM_INFO info;
        fn_GetNativeSystemInfo(&info);
        if (info.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {
            return true;
        }
    }
    return false;
}
カテゴリー: 備忘録 | コメントをどうぞ

Raspberry Pi 7インチ公式タッチディスプレイ

http://akizukidenshi.com/catalog/g/gM-09917/

Raspberry Pi 7インチ公式タッチディスプレイで、液晶画面のバックライトをON/OFFしたり、輝度を変更する方法。

バックライトをOFF

echo 1 > /sys/class/backlight/rpi_backlight/bl_power

バックライトをON

echo 0 > /sys/class/backlight/rpi_backlight/bl_power

バックライトの輝度を変更

echo 80 > /sys/class/backlight/rpi_backlight/brightness
カテゴリー: 未分類 | コメントをどうぞ

WindowsでQtでOCX

Windows上でQtを使ってOCX(ActiveXコントロール)を作っています。

https://github.com/soramimi/ActiveQtExample

↑ここまでできています。

MyControlとMyAppというプロジェクトがあります。前者はOCXです。後者はexeアプリケーションで、メインウィンドウにOCXが貼り付けてあります。

それぞれのプロジェクトをリリースビルドします。

build/release フォルダに移動します。Qt SDKのbinフォルダから、Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dllの3つをコピーします。続いて、

regsvr32 MyControl.dll

を実行して、コントロールを登録します。(登録解除するには /u を付けて実行します)

MyApp.exeを実行すると、ウィンドウが表示され、楕円が描画されます。メインウィンドウはMyApp.exeが表示し、楕円はMyControl.dllが描画するようになっています。

activeqt

ウィンドウの閉じるボタンを押すと、閉じることはできますが、タスクマネージャーを見ると、MyApp.exeが残ったままになっています。

本家フォーラムにも、同様な現象が報告されているのですが、進展がないようです。

この不具合は、MyApp.exeがリリースビルドの時だけ発生し、デバッグビルドにすると、正常に動作するようです。

また、MyAppのメインウィンドウに、下記のようなコードを追加すると、プロセスは終了しますが、根本的な解決ではないような気がします。

#include <windows.h>

void MainWindow::closeEvent(QCloseEvent *e)
{
    PostQuitMessage(0);
    QMainWindow::closeEvent(e);
}

開発環境: Windows 7 (64bit)  / MSVC2013 / Qt5.5.1


これは仕様っぽい?

https://bugreports.qt.io/browse/QTBUG-29116

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    QObject::connect(qApp, SIGNAL(lastWindowClosed()), qApp, SLOT(quit()));
    return a.exec();
}

最後のウィンドウが閉じたときに、アプリケーションを終了する、って明示的に書かないといけないのかな。

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    a.setQuitOnLastWindowClosed(true);
    return a.exec();
}

これでもいいみたい。ただし、 w.show(); より先に a.setQuitOnLastWindowClosed(true); を実行すると、うまくいかない様です。

カテゴリー: 未分類 | コメントをどうぞ

東急バス降車ボタンキット

東急バス降車ボタンキットに付属するスイッチの結線について解説します。

tomarimasu0

3ピンのコネクタがついています。 中央の黒がGND、白に12Vをかけるとランプがつきます。緑がスイッチです。

tomarimasu1

内部の様子です。

tomarimasu2

コネクタは2mmピッチです。

tomarimasu3

カテゴリー: 未分類 | 1件のコメント