Last night I was studying tutorial 7, trying to run the codes in VS2010 environment, a problem emerged:
“LCDRange.obj : error LNK2001: unresolved external symbol “public: virtual struct QMetaObject const * __thiscall LCDRange::metaObject(void)const “”
Tutorial 7 is different from tutorial 6 only by adding a user defined signal and slot, which means the signal/slot suite requires special linking strategies. I found a very good thread providing general information and a piece of a Chinese blog suggesting a simple but effective solution . It seems that QT has a fundamental mechanism for signals and slots, which is called the Meta-Object System (get a better understanding by reading the QT Documentation). Simply compiled by cl compiler/linker, the external symbols couldn’t be recognized correctly, which led errors to occur.
In summary, when defining a self-defined signal/slot, the following should be done:
1. Declare the new class in a separate header file.
2. Always remember to contain the “Q_OBJECT” macro at the beginning of class declaration (read the QT Documentation on Using the Meta-Object Compiler/MOC).
3. Compile the header files using MOC with following syntax: moc xxx.h -o moc_xxx.cpp
4. Add moc_xxx.cpp into the project.
Then build! It should work now~