我的第一个QT程序

2014年04月17日

以前一直写命令行程序,这次接到一个任务要写一个简单的GUI程序。虽然以前写过matlab的界面,但是那玩意儿不能独立出来单独跑(?)。这次的客户用的是Windows XP,作为一名MS黑,咋好意思用MFC那货,粗粗了解了一下就觉得那玩意儿好复杂。QT必须是首选啊,于是乎,花两天时间学着写个QT试试。

好吧,实际上就一个页面,并且我还是用的QT designer拖的控件。布局完了写信号槽就行了。在Windows上编译的时候就麻烦了,用Mingw+QT5编译完全没有问题,用VS2010+QT creator编译的时候就麻烦了,各种问题,完全不知道为啥。下面记一下,

  1. 编译之前先清空项目,然后qmake,再生成项目。或者手动生成moc文件后包含到项目中。

    error LNK2001: 无法解析的外部符号 “public: virtual struct QMetaObject const * __thiscall Widget::metaObject(void)const “

  2. 将源代码保存为Unicode编码。两种方法,用VS打开有问题的文件,File->Advanced save options->选择UNICODE codepage 1200后保存;用vim转码argdo set fileencoding=ucs-2le |update后保存。

    C4819: 该文件包含不能在当前代码页(936)中表示的字符。

  3. 中文乱码,用宏包装常量字符串QStringLiteral("这是中文")

  4. 运行时找不到dll,复制QT安装目录下的dll文件(如PATH:\to\QT\Qt5.2.1\5.2.1\msvc2010\bin)到可执行文件目录或者添加dll文件目录到环境变量。有一个文件libEGL.dll缺失会导致错误

    This application failed to start because it could not find or load the Qt platform plugin “windows”