Sunday, January 31, 2010

Twitter API client library for C++ and Qt framework

QTwitterClient is an API client library for the ubiquitous Twitter microblogging service written in C++ and using the Qt framework.

QTwitterClient is cross-platform and works on all platforms supported by Qt such as Windows, Linux, and Mac OS X, even mobile platforms like Symbian and Maemo.

Usage is very simple:
QTwitterClient *twitter = new QTwitterClient(this);
twitter->setLogin(login);
twitter->setPassword(password);

twitter->tweet("I feel really good today!");
QTwitterClient is free/open source software and licensed under LGPL 2.1 or later.

Check out QTwitterClient project page to get the source code. I will appreciate any feedback you have.

Update: Moved QTwitterClient project to Gitorious.

Pastebin API client library for C++ and Qt framework

During my pursuit of Qt Mobility Contest, I created several utility class libraries. The first is QPastebinClient, which as its name suggests, is an API client library for the popular Pastebin service written in C++ and using the Qt framework.

QPastebinClient is cross-platform and works on all platforms supported by Qt, even mobile platforms like Symbian and Maemo. Usage is very simple:
QPastebinClient *pastebin = new QPastebinClient(this);

connect(pastebin, SIGNAL(finished(QString)), this, SLOT(setPastebinUrl(QString)));
connect(pastebin, SIGNAL(failed(QString)), this, SLOT(showError(QString)));

pastebin->paste("Some worthy code");

QPastebinClient is free/open source software and licensed under LGPL 2.1 or later.

Check out QPastebinClient project page to get the sources. I will appreciate any feedback you have.

Update: Moved repository to Gitorious.

Friday, January 29, 2010

Troubleshooting Qt Mobility Messaging for Symbian

My issue is compiling a Qt Mobility Messaging app for the WINSCW is not working. Qt Contacts work fine.

It seems to complain about two header files (only): qmessageglobal.h and qmessagedatacomparator.h

Other Qt Mobility headers are properly in C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include

Error messages:

make -r -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\WINSCW.make" MAKEFILE VERBOSE=-s
WARNING: Can't find following headers in System Include Path
<qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessagedatacomparator.h> <qmessageglobal.h> <qmessagedatacomparator.h> <qmessageglobal.h> <qmessagedatacomparator.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h>
(Sys Inc Paths "\Qt\4.6.1-symbian\include\QtCore\" "\Qt\4.6.1-symbian\include\QtCore\tmp\" "\Qt\4.6.1-symbian\include\QtGui\" "\Qt\4.6.1-symbian\include\QtGui\tmp\" "\Qt\4.6.1-symbian\include\" "\Qt\4.6.1-symbian\include\tmp\" "\Users\ceefour\Documents\qtcontest\message-merge\" "\Users\ceefour\Documents\qtcontest\message-merge\tmp\" "\Qt\4.6.1-symbian\mkspecs\common\symbian\" "\Qt\4.6.1-symbian\mkspecs\common\symbian\tmp\" "\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include\" "\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include\stdapis\" "\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include\stdapis\sys\" "\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include\stdapis\stlport\" "\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include\variant")
Dependency list for "\Users\ceefour\Documents\qtcontest\message-merge\mainwizard.cpp" may be incomplete


Basically the errors boil down to :

the file 'qmessageglobal.h' cannot be opened

Solution

Make sure you've already added to the .pro file :

CONFIG += mobility
MOBILITY += messaging

You need to #include <qtmessaging.h> instead of individual qmessage* header files.

Then if it complains:

WARNING: Can't find following headers in System Include Path
<qtmessaging.h>
qtmessaging.h: No such file or directory

This means you have not configured Qt Mobility Messaging properly. (copying headers happened in "configure" stage, not "make")

Redo the configure, and check that you have qtmessaging.h in C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include

If it still doesn't show up, like in my case, there's a hack/workaround. Copy the following files manually from C:\QtMobility\src\messaging to C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include :
  • qtmessaging.h
  • qmessageglobal.h
  • qmessagedatacomparator.h
Assuming Qt Mobility Messaging was built successfully, at least in my case, my Qt Mobility Messaging app works fine.

Thursday, January 28, 2010

Qt Mobility for Symbian Problems & Solutions

This is mixed log of my troubleshooting attempts while developing using Qt Mobility for Symbian.
  1. Ensure WINSCW for Command Line
  2. Install Qt For Symbian
  3. Install Qt Mobility for Symbian
  4. Qt Mobility libraries:
  5. In C:\QtMobility\symbian\install_to_sdk\Qt_Mobility_tech_preview_libraries.zip
  6. Extract to C:\Symbian\9.4\S60_5th_Edition_SDK_v1.0_2
  7. Qt Mobility includes:
  8. Launch Qt for Symbian Command Prompt
  9. Make sure Perl is still in path (perl -v)

This seems wrong: "Rather than building the libraries it is also possible to deploy a prebuilt set of libraries. Under the c:\QtMobility\%DISTNAME%\symbian directory there contains Mobility_tech_preview_libraries.zip. Extract this into the SDK root directory to add the necessary libraries. If you have multiple SDKs then repeat this step for each of them."
because it only installs the binary lib files but not the header files, so we still need to at least "configure" Qt Mobility.
That should create "qcontact.h" etc. on C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include
"make" is not needed
Rebuild debug helper -- masih error
How to Build & Run:
Build configuration: using Symbian, compiler: WINSCW
Run configuration: Symbian emulator

What is WINSCW ?
WINSCW is Symbian emulator. The WINSCW compiler builds Symbian programs that can be run or debugged on the S60 Emulator.
Symbian Emulator only accepts WINSCW built programs, it cannot run apps built using GCCE, ARM9E, ARMV6.
What is CodeWarrior?
It's the former, expensive IDE for Symbian. Now replaced by Carbide.c++ which is free.
What is GCCE?
From Forum Nokia Wiki
GCCE (GNU Compiler Collection for Embedded) is an ARM-based compiler used in Symbian OS 9. Before Symbian OS 9, GCC is used to compile for the target. It is intended for building third party applications. It cannot be used to compile the full operating system.
What is RVCT-ARMV6?
It's the proprietary compiler from ARM. It is needed to compile Qt (for now), and for debugging Symbian apps using Qt Creator.
RVCT vs GCCE: http://discussion.forum.nokia.com/forum/showthread.php?t=109299
To run using Emulator:
1. Shutdown the Emulator first (make sure it's not running)
2. Then run app

Error during installation of Qt_Mobility_tech_preview.sis to Emulator:
Certificate error. Contact the application supplier.

Error during Emulator (but ignorable):
C:\Qt\4.6.1-symbian\examples\animation\animatedtiles>make run
call /S60/devices/S60_3rd_FP2_SDK_v1.1/epoc32/release/winscw/udeb/animatedtiles.
exe
Terminate batch job (Y/N)? n

Unhandled exception filter called from program C:\S60\devices\S60_3rd_FP2_SDK_v1
.1\epoc32\tools\make.exe
ExceptionCode = c0000005
ExceptionFlags = 0
ExceptionAddress = 416569
Access violation: write operation at address 428
Solution --> Set Emulator compatibility to Windows XP SP3

Error during make run:
C:\Qt\4.6.1-symbian\examples\animation\animatedtiles>make run
call /S60/devices/S60_3rd_FP2_SDK_v1.1/epoc32/release/winscw/udeb/animatedtiles.exe
C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\tools\make.exe: [run] Error -1073741819 (ignored)

I got this error during Clean:
make[2]: \S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\MESSAGE-MERGE_0XE6F7F146\WINSCW\MESSAGE-MERGE_0XE6F7F146.WINSCW: No such file or directory
make[2]: *** No rule to make target `\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\MESSAGE-MERGE_0XE6F7F146\WINSCW\MESSAGE-MERGE_0XE6F7F146.WINSCW'. Stop.
make[1]: *** [CLEANMESSAGE-MERGE_0XE6F7F146] Error 2

I got this error during Build (Symbian Debug):
mwldsym2.exe: Invalid object 'main.o': unknown machine (0x457f)
make[1]: Leaving directory `C:/Users/ceefour/Documents/qtcontest/message-merge'
make -r -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\WINSCW.make" FINAL CFG=UDEB VERBOSE=-s
Errors caused tool to abort.
make[2]: *** [\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\WINSCW\udeb\message_merge.exe] Error 1
make[1]: *** [TARGETMESSAGE-MERGE_0XE6F7F146] Error 2
Solution --> http://discussion.forum.nokia.com/forum/showthread.php?t=105186
1) delete all *.o files manually (for some reason "clean project" is not enough)
2) rebuild.
In my case it helped. Problem arose because I created hole project on Linux ("normal" qt) and then copied files (including *.o) to windows machine to play with Carbide.

I got this error during Run:
Starting C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\message-merge.exe...
The process could not be started!
--> It means the file does not exist (the Build process fails)

Building Symbian Release + GCCE gives .. last words:
make -r -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\GCCE.make" TARGET CFG=UREL VERBOSE=-s
make[1]: Entering directory `C:/Users/ceefour/Documents/qtcontest/message-merge'
make -s -C \Users\ceefour\Documents\qtcontest\message-merge -f "MAKEFILE_0XE6F7F146.MK" TO_ROOT=..\..\..\..\.. EPOCBLD=..\..\..\..\..\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\MAKEFILE_0XE6F7F146\GCCE TO_BLDINF=..\..\..\..\..\Users\ceefour\Documents\qtcontest\message-merge PLATFORM=GCCE CFG=UREL BLD
make -s -r -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\MESSAGE-MERGE_0XE6F7F146\GCCE\MESSAGE-MERGE_0XE6F7F146.GCCE" UREL
main.cpp
templatesdialog.cpp
templateeditdialog.cpp
mainwizard.cpp
messagemerger.cpp
moc_templatesdialog.cpp
moc_templateeditdialog.cpp
moc_mainwizard.cpp
make[1]: Leaving directory `C:/Users/ceefour/Documents/qtcontest/message-merge'
make -r -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\GCCE.make" FINAL CFG=UREL VERBOSE=-s
make[1]: Entering directory `C:/Users/ceefour/Documents/qtcontest/message-merge'
make -s -C \Users\ceefour\Documents\qtcontest\message-merge -f "MAKEFILE_0XE6F7F146.MK" TO_ROOT=..\..\..\..\.. EPOCBLD=..\..\..\..\..\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\MAKEFILE_0XE6F7F146\GCCE TO_BLDINF=..\..\..\..\..\Users\ceefour\Documents\qtcontest\message-merge PLATFORM=GCCE CFG=UREL FINAL
make[1]: Leaving directory `C:/Users/ceefour/Documents/qtcontest/message-merge'
C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\tools\make.exe: Leaving directory `C:/Users/ceefour/Documents/qtcontest/message-merge'
Exited with code 0.


Prepare the Emulator with Qt :
File -> Open. Install qt_demos.sis
Error: Request application access not granted.

Qt looks awful in E71
Solution --> I was using Dark Personal, switching to Grey Steel works fine.

Build successful (Debug WINSCW), but Error during Run
Starting C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\message-merge.exe...
The process could not be started!
Cause: Project name contains '-'. Output filename is message_merge.exe, but tried to run message-merge.exe. Seems like Symbian does not support dash in app names.
Solution: Either
Rename project using underscore "_" instead of dash "-", or
Run message_merge.exe manually

Trouble: App crashes when accessing Qt Mobility / Symbian features
Cause: SYMBIAN.CAPABILITY is not properly specified in the .pro file
See: http://discussion.forum.nokia.com/forum/showthread.php?t=158729
http://discussion.forum.nokia.com/forum/showthread.php?t=90428
After doing this, during installation, it shows dialog for ReadUserData and WriteUserData. So the capability is requested well.
But --> Problem persists! :-(

Trouble: Required application access not granted.
When installing samplephonebook.sis, E71 says "Required application access not granted."
See: http://mobile.antonypranata.com/2006/06/16/interpreting-signing-error-messages-in-s60-3rd-edition/
Hint: Check that your certificate can be used to sign all capabilities needed by your application. For example, if you use self-signed certificate, you can only sign basic set capabilities, i.e. NetworkServices, ReadUserData, WriteUserData, LocalServices and UserEnvironment. If your application requires one of the extended capabilities, for example SwEvent, you cannot sign it with self-signed certificate. In this case, apply for developer certificates from Symbian Signed.

Is Carbide.c++ needed?
If Qt Creator comes with the Nokia C/C++ compiler (WINSCW) then yes, you can ignore Carbide.c++ completely. Of if you don't plan to do any emulator builds ...

Compilation Error release-gcce
Doing make release-gcce on writemessage QtMobility example throws this error:

make -r -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\QtMobility\examples\writemessage\GCCE.make" FINAL CFG=UREL VERBOSE=-s

make[2]: *** No rule to make target `\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\ARMV5\LIB\QtMessaging_tp.dso', needed by `\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\GCCE\urel\writemessage.exe'. Stop.

make[1]: *** [TARGETWRITEMESSAGE_0XE6E34AD4] Error 2

make[1]: Entering directory `C:/QtMobility/examples/writemessage'

make -s -C \QtMobility\examples\writemessage -f "MAKEFILE_0XE6E34AD4.MK" TO_ROOT=..\..\.. EPOCBLD=..\..\..\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\QtMobility\examples\writemessage\MAKEFILE_0XE6E34AD4\GCCE TO_BLDINF=..\..\..\QtMobility\examples\writemessage PLATFORM=GCCE CFG=UREL FINAL

make[1]: Leaving directory `C:/QtMobility/examples/writemessage'

C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\tools\make.exe: Leaving directory `C:/QtMobility/examples/writemessage'

Exited with code 0.



Running "make sis" also errors, which means the above build was unsuccessful, even though "exit code 0" :

C:\QtMobility\examples\writemessage>make sis
make -s -f Makefile ok_sis
Processing writemessage_release-gcce.pkg...
 Error : Cannot find file : /S60/devices/S60_3rd_FP2_SDK_v1.1/epoc32/release/gcce/urel/writemessage.exe

writemessage_release-gcce.pkg(28) : error: file I/O fault.
file I/O fault, cannot open writemessage_release-gcce_unsigned.sis.

SIS creation failed!
Solution --> Unpack the QtMobility for Symbian SDK binaries.

WINSCW Debug, Build Success, Error during Run:
Starting C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\contactsgo.exe...
C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\contactsgo.exe exited with code -1073741819
Solution --> Close already running Emulator.

Qt Mobility Contacts when accessing a QContact object crashes on E71, but runs well on emulator
Seems like something to do with "weird" contacts. On my E71, the first two contacts (Groups) are just fine.
I think my Contact LocalId 1460 is somewhat corrupted or has data that Qt Mobility Contacts Symbian cannot cope with. :-(

WINSCW Debug, Build Success, Error During Run:
Starting C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\contactsgo.exe...
C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\contactsgo.exe exited with code 100
Solution --> Connect to a network, at least loopback. Or just try again.

How to know if WINSCW Debug Qt Mobility Contacts app is good:
Starting C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\contactsgo.exe...
Plugin paths: ("C:/Private/e6fe6e03", "C:/resource/qt/plugins", "C:/Private/e6fe6e03")
Looking for plugins in "C:/resource/qt/plugins/contacts" ("mobapicontactspluginsymbian.qtplugin")
Dynamic: found an engine plugin 0x3d9e3828 with name "symbian"
Found engines: ("symbian[]")
Found actions: ()
C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\contactsgo.exe exited with code 0

Qt Mobility Contact doesn't run at all on E71, but runs well on emulator
This runs:
    QList<QContactLocalId> contactIds = cm.contacts();
This doesn't:
    QContactFilter filter;
    QList<QContactLocalId> contactIds = cm.contacts(filter);

Can't build Qt Contacts app WINSCW Debug:
make[2]: *** No rule to make target `\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\WINSCW\udeb\QtContacts.lib', needed by `\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\WINSCW\udeb\messagemerge.exe'. Stop.
make[1]: *** [TARGETMESSAGE-MERGE_0XEA138C70] Error 2
But --> QtContacts_tp.lib exists !!!
Cause --> Mismatch between Qt Mobility binaries on S60 SDK and the Qt Mobility header files.
Solution -->  Make sure use the exact same Qt Mobility version installed in the S60 SDK and the header files used for development.

mingw-compiled Qt app on Windows: Entry Point Not Found?

I am trying to deploy a release version of my Qt app on Windows, with Qt as shared library.

I have put the following Qt-related shared library DLL files in my application directory:
  • QtCore4.dll
  • QtGui4.dll
  • mingwm10.dll
  • libgcc_s_dw2-1.dll
  • QtContacts_tp.dll (Qt Mobility Contacts DLL)
But I still get this error:


Entry Point Not Found: The procedure entry point _Z15qAddPostRoutinePFvvE could not be located in the dynamic link library QtCore4.dll.

Why is this happening? :-(

Update: Thanks to this QtForum.org thread, it happened because I used the QtCore4.dll and QtGui4.dll from C:\Qt\2010.01\bin. After I used the DLLs from C:\Qt\2010.01\qt\bin, my application works fine! :-)

Related articles:

Sunday, January 24, 2010

Installing Qt 4.6.2 for Symbian SDK on Windows

In this blog post, I will show you how to setup the complete Qt for Symbian S60 development environment properly.

Symbian S60 Development Environment

First we need to setup a Symbian S60 Development Environment. No Qt-related stuff here yet.
  1. Install ActiveState Perl v5.6.1.638 (use ONLY version 5.6.1.638, other versions are not compatible).




    Windows Vista / Windows 7: make sure to run the installer as administrator.
    If not, ActiveState Perl Setup cannot modify the PATH. The workaround is to manually add C:\Perl\bin to the system environment variable PATH.

  2. Install Carbide.c++ IDE (at least version 2.3.0) or Symbian Application Developer Toolkit (ADT) (at least version 1.4, includes Carbide.c++ IDE 2.3.0.)
    I'm curious if Carbide.c++ is still needed when we use Qt Creator as the IDE.
  3. Click Start Menu -> Carbide.c++ -> Configure environment for WINSCW command line.


  4. Install Symbian S60 Platform SDK appropriate for your target device (includes GCCE compiler).
    Since we'll be using Qt for Symbian, it doesn't really matter which S60 Platform SDK you're using, any version above 3rd Edition FP1 (3.1) is good. 5th Edition seems to be a good choice though.




    When asked for Eclipse installation, just skip it.



    During install, if it complains about Java Runtime Environment, simply ignore if because you won't be using it anyway.
    When prompted for installation of CSL ARM Q1C Toolchain, click Yes to install.
For Windows Vista and Windows 7:
  • There are a few compatibility issues
  • You will be prompted by the SDK installer to apply the GCCE patch for MS Vista from <SDK>\plugins\vistapatch\ (<SDK> is C:\S60\devices\S60_5th_Edition_SDK_v1.0 by default). There are instructions in the help.txt file in that directory.
  • The SDK will normally register itself in the file: C:\Program Files\Common Files\Symbian\devices.xml, however on Vista it is forced to create the file in %USERPROFILE%\AppData\Local\VirtualStore\Program Files\Common Files\Symbian\devices.xml. Copy the file manually into the correct location.


  1. Install the Open C/C++ Plug-in for each Symbian Platform SDK you have (though with Qt for Symbian, you just need to have one Symbian SDK).
If you're working on a S60 3rd Edition, FP1 SDK (the earliest version on which Qt will run) you will also need to reinstall the RPipe library. This was installed by the OpenC plugin SDK to the S60_3rd_FP1_3 SDK root directory: \Symbian\9.2\S60_3rd_FP1_3\RPipe_3.1.zip:
  1. Uncompress RPipe_3.1.zip over the SDK root \Epoc32\ tree (e.g. \Symbian\9.2\S60_3rd_FP1_3\Epoc32\).
  2. Download and replace the file <SDK>\epoc32\tools\getexports.exe with getexports.exe
If you want to debug your app on your phone, download AppTRK for your phone and install it. e.g. for Nokia 5800 xpressMusic which runs Symbian S60 5th Edition, you download  s60_5_0_app_trk_3_1_2.sisx.

Qt for Symbian Development Environment

You can then setup Qt for Symbian development environment:
  1. Install Qt for Symbian SDK.
    Make sure to change the Qt folder to C:\Qt\4.6.2-symbian because C:\Qt\4.6.2 will be used for Qt for Windows. Each Qt SDK (e.g. for Windows and for Symbian) will have its own folder. Though you don't have to install Qt SDK for Windows if you only develop for Symbian, it doesn't hurt to name your Qt installation folder clearly.
Install Qt for Symbian on the phone / emulator:
  • Remove previous Qt versions from phone
  • Install either qt_installer.sis (Qt full package) or qtdemos.sis (Qt package + demos) to your phone or emulator.

Setup Qt Creator with Qt for Symbian

  1. Install Qt SDK
  2. Tools -> Options.
  3. Qt4 -> Qt Versions. S60's Qt must be detected from Qt for Symbian SDK.
  4. Qt4 -> S60 SDKs: ?
To get started with Qt Mobility, click here for Qt Mobility SDK Installation for Symbian on Windows tutorial.

For more information about Qt C++ development, check out C++ GUI Programming with Qt 4 (2nd Edition).

To learn Symbian C++ development, I recommend Porting to the Symbian Platform: Open Mobile Development in C/C++ (Symbian Press).

References:
Updates: Updated for Qt 4.6.2.

"QMetaObject::connectSlotsByName: No matching signal for ..." Qt GUI Warning Message

If you get an error message (warning actually) like this:
QMetaObject::connectSlotsByName: No matching signal for on_MainWindow_destroyed()

It means you have an automatically named slot method in the main window or top-level widget.

Qt will automatically connect slots for child widgets, but not the top-level widget.

To solve this problem, you need to:
  1. Rename the slot so it doesn't start with "on_"
  2. Manually connect the slot.
connect(this, SIGNAL(destroyed()), this, SLOT(handle_MainWindow_destroyed()));

I've reported this as Qt Designer bug QT-7582.

References: