Here are the steps of creating a simple "Hello world" GUI application for FriendlyARM board. You should have development tools ARM-Linux GCC 4.3.2 and ARM-Qtopia 2.2.0 already installed. If you don't have them yet you can download them from here: http://www.friendlyarm.net/downloads
My PC is working under Ubuntu 8.04. and the path of Qtopia installation is /usr/local. I know that my environment is not quite correctly set.That's why I do some steps as root and source some environment variables from file setQpeEnv. But it works.
Here are the steps:
1. With Qt Designer create the main form.
Remark:
Qt Designer comes with the "ARM-Qtopia 2.2.0". It's executable is:
/usr/local/arm-qtopia/qtopia-2.2.0-FriendlyARM/qt2/bin/designer
The screenshot above is from this tool.
Do not try newer versions of Qt Creator. They are not compatible.
From File-New select "Dialog" template. Change the "name" property to frmMainWindow. This will be the name of the form class. Save it as MainWindow.ui. This is an XML file. You can view and edit it's contents with text editor. For example if you want to add tabs to TabWidget this is the only option.
2. Create a script file "build" for building the application with following content:
#!/bin/bash3.Create a script file "formuic" for compiling the .ui form file with the following content
source /usr/local/arm-qtopia/qtopia-2.2.0-FriendlyARM/setQpeEnv
qmake -spec /usr/local/arm-qtopia/qtopia-2.2.0-FriendlyARM/qtopia/mkspecs/qws/linux-arm-g++ -o Makefile *.pro
make clean
make
echo MAIN FORM
echo HEADER
/usr/local/arm-qtopia/qtopia-2.2.0-FriendlyARM/qt2/bin/uic -o MainWindow.h MainWindow.ui
echo CLASS
/usr/local/arm-qtopia/qtopia-2.2.0-FriendlyARM/qt2/bin/uic -i MainWindow.h -o MainWindow.cpp MainWindow.ui
Open a terminal window and go to the project folder. Run the script:
#./formuic
The uic tool (user interface compiler) takes the .ui file.
When MainWindow.ui is compiled two source files are created - a header and cpp. They content the form class "frmMainWindow".
4. Create two files main.cpp , MainWindowImp.h and MainWindowImp.cpp with the following contents:
main.cpp
#include <qtopia/qpeapplication.hQTOPIA_ADD_APPLICATION macro takes two parameters. The first is "stivlib" - the name of the project. The second frmMainWindowImplementation is the name of the class from MainWindowImp.h>
#include "MainWindowImp.h"
QTOPIA_ADD_APPLICATION("stivlib",frmMainWindowImplementation)
QTOPIA_MAIN
MainWindowImp.h
In this file a new class frmMainWindowImplementation is defined which inherits the form class frmMainWindow. This is done because each time you make changes to you form with Qt Designer and the .ui file is compiled any changes made in MainWindow.h and MainWindow.cpp will be lost. All the functional implementations like new variables definitions and new methods should be done in this new class.
/****************************************************************************
** Created: Sun Jul 11 18:05:02 2010
** by: Svilen Stavrev
** Implementation Class for the main form
****************************************************************************/
#ifndef FRMMAINWINDOWIMP_H
#define FRMMAINWINDOWIMP_H
#include "MainWindow.h"
class frmMainWindowImplementation : public frmMainWindow
{
Q_OBJECT
public:
frmMainWindowImplementation( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 )
: frmMainWindow(parent,name,modal,fl)
{
//Constructor
}
};
#endif // FRMMAINWINDOW_H
MainWindowImp.cpp
/************************************************
** Created: Sun Jul 11 18:05:02 2010
** by: Svilen Stavrev
** Implementation Class for the main form
************************************************/
#include "MainWindowImp.h"
5. Generate the .pro (project) file using the qmake tool:
$su
#source /usr/local/arm-qtopia/qtopia-2.2.0-FriendlyARM/setQpeEnv
#qmake -project
A project file stivlib.pro has been created.
Open it with the text editor and add these lines:
TARGET=stivlib <-- This is the exact name of the target executable file. No extension .bin will be added5. Build the application
CONFIG += qtopiaapp
CONFIG -= buildQuicklaunch
#./buildVoila! The binary file stivlib is now in the project folder.
On my next post I'll show how to upload it to the FriendlyARM board and how to create a desktop launcher.
Very nice! Waiting for more.
ОтговорИзтриванеHello,
ОтговорИзтриванеMy PC is working under Ubuntu 10.10 and my path of Qtopia installation is /opt/FriendlyARM/mini2440 . So I change the third line in the file 'formuic' to >> /opt/FriendlyARM/mini2440/arm-qtopia/qtopia-2.2.0-FriendlyARM/qt2/bin/uic -o MainWindow.h MainWindow.ui .
But when run the script I only see:
MAIN FORM
HEADER
No prompt, it seems that the terminal hangs. Wat can be the problem?
Wim
Sorry for late reply jeba.
ОтговорИзтриване"MAIN FORM" and "HEADER" are just echo.
Try to call uic from command line to check that you have the proper installation. Enter this:
/opt/FriendlyARM/mini2440/arm-qtopia/qtopia-2.2.0-FriendlyARM/qt2/bin/uic
And if everything is ok you should get somethink like this:
Qt user interface compiler
Usage: /opt/FriendlyARM/mini2440/arm-qtopia/qtopia-2.2.0-FriendlyARM/qt2/bin/uic [options] [mode]
Generate declaration:
.........
.........
I usually do it as root. If you don't get this responce check the path to uic program again.
If everithing is ok with uic check your .ui file. I can send you a ui file that I'm sure is fine.
Hi!
ОтговорИзтриванеI have followed your tutorial and all works fine till I get to build the application. The following error occurs:
arm-linux-g++ -shared -o libstivlib.so .obj/release-shared/main.o .obj/release-shared/MainWindowImp.o .obj/release-shared/MainWindow.o .obj/release-shared/moc_MainWindow.o -luuid -lqtopia2 -lqtopia -lqpe -L/qtopia-2.2.0-FriendlyARM/qtopia/lib -L/qtopia-2.2.0-FriendlyARM/qt2/lib -lqte
/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lqtopia2
Could you please give me a hint how to solve this issue?
I would like to add something.
ОтговорИзтриванеI have changed stivlib with hello. I have checked the Makefile and I can see that the final target is libhello.so. I think it should be hello the final target.
Thanks,
Sasha.
OK thanks stavrev the first part is working now. The problem was that i had used QT4 designer instead of the designer in /opt/FriendlyARM/mini2440/arm-qtopia/qtopia-2.2.0-FriendlyARM/qt2/bin folder. Now i can create the MainWindow.h and .cpp file and also the .pro file. I have stored the files in ~/Desktop/test, and so a file test.pro is created by the "#qmake -project" command. When run the build script i got the following errors:
ОтговорИзтриванеmain.cpp:1:10: error: #include expects "FILENAME" or
main.cpp:2:10: error: #include expects "FILENAME" or
main.cpp:4: error: expected constructor, destructor, or type conversion before '(' token
make: *** [.obj/release-shared/main.o] Error 1
Hi, jeba_wdej.
ОтговорИзтриванеReplace the first two lines with:
#include "qtopia/qpeapplication.h"
#include "MainWindowImp.h"
Sasha.
Hi Sasha,
ОтговорИзтриванеThe compiler tries to build library instead of application.
Seems like you missed to change the target name in QTOPIA_ADD_APPLICATION macro in main.cpp file. It should content this:
#include <qtopia/qpeapplication.h>
#include "MainWindowImp.h"
QTOPIA_ADD_APPLICATION("hello",frmMainWindowImplementation)
QTOPIA_MAIN
If compiler can't find main() entry point it creates library.
I think other possible reason might be if you run
#qmake -project
before you have main.cpp file created. This file should be present in the hello.pro in the SOURCE line.
The file hello.pro:
CONFIG += qtopiaapp
CONFIG -= buildQuicklaunch
TEMPLATE = app
INCLUDEPATH += .
TARGET = hello
# Input
HEADERS += MainWindowImp.h
INTERFACES += MainWindow.ui
SOURCES += main.cpp MainWindowImp.cpp
Check these things, delete the Makefile and run build again. Hope this will help.
Svilen
P.S.
On the step 4 I wrote by mistake:
4. Create two files main.cpp , MainWindowImp.h and MainWindowImp.cpp with the following contents:
The files are not two but three.
Sorry
Thanks Sasha I'm one step further now.But now I got another couple of errors:
ОтговорИзтриванеmain.cpp:2:27: error: MainWindowImp.h: No such file or directory
main.cpp: In function 'QWidget* create_frmMainWindowImplementation(QWidget*, const char*, uint)':
main.cpp:4: error: expected type-specifier before 'frmMainWindowImplementation'
main.cpp:4: error: cannot convert 'int*' to 'QWidget*' in return
main.cpp:4: error: expected ';' before 'frmMainWindowImplementation'
main.cpp:4: error: 'frmMainWindowImplementation' was not declared in this scope
make: *** [.obj/release-shared/main.o] Error 1
The content of my genetarted projectfile test.pro is:
######################################################################
# Automatically generated by qmake (1.06c-Qtopia) Sun Nov 28 22:27:55 2010
######################################################################
TEMPLATE = app
INCLUDEPATH += .
# Input
INTERFACES += MainWindow.ui
SOURCES += main.cpp MainWindowImp.cpp
TARGET=test
CONFIG += qtopiaapp
CONFIG -= buildQuickLaunch
Hi jeba,
ОтговорИзтриванеDid you miss MainWindowImp.h file? Also you shoud have heder files described in the project file. Add this line to test.pro
HEADERS += MainWindowImp.h
Here is what .pro file should content:
CONFIG += qtopiaapp
CONFIG -= buildQuicklaunch
TEMPLATE = app
INCLUDEPATH += .
TARGET = hello
# Input
HEADERS += MainWindowImp.h
INTERFACES += MainWindow.ui
SOURCES += main.cpp MainWindowImp.cpp
Hi Svilen,
ОтговорИзтриванеYES it's working now, thanks. A stivlib.so file will be produced by the build script. Is this the "executable" file? Where can i find more information about gui programming with Qtopia?
The executable file is stivlib. Files with .so are library files.
ОтговорИзтриванеThere are many books and tutorials on Qt programming. You can install Qt on PC with Windows or Linux and start learning it. Programming for FriendlyARM is not much different.
I can´t find an executable file. The only file produced is the libstivlib.so file. How can i execute this file on my FriendlyARM? I have searched on my PC for files named stivlib but I can´t find this.
ОтговорИзтриванеWhat I have seen with QT on my PC under ubuntu is that it just is easy to make GUI applications as it is in visual studio for windows. But for QTopia there is only a designer for the form design. What i miss is a complete tool, or a clear description of how to make complex GUI applications for my FriendlyARM.
Hello jeba,
ОтговорИзтриванеThe next step is to upload the executable and create a launcher.
http://farm2440.blogspot.com/2010/07/uploading-application-and-creating.html
I can't tell what is the reason you get library instead of executable. Can you send me the contents of your project folder?
farm2440@gmail.com
I apologize for misleading some of you
ОтговорИзтриванеI wrote:
CONFIG -= buildQuickLaunch
and it should be:
CONFIG -= buildQuicklaunch
Now it's corrected.
Hey,
ОтговорИзтриванеI don't have the Qt Designer on the CD which i got with my mini, therefore i can't make any apps for it. Can you mail me the download link for Qt Designer from Trolltech for qtopia 2.2.0 or post it as a download link in your blog. My mail id is tanushri.c [at] gmail [dot] com
Regards
Tan
Hello,
ОтговорИзтриванеI am student and i have to do some application for FriendlyArm. I used your tutorial but i am still getting error:
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lqtopia2
collect2: ld returned 1 exit status
i dont know what do do with it and i even cant google it. Sasha asked the same thing but he didnt write how he solved it. Can you please help me somehow? I cant move forward.
Thanks
Simon
Този коментар бе премахнат от автора.
ОтговорИзтриванеTanu, Simon
ОтговорИзтриванеSorry I was away for a while and didn't notice your comments. If it's not too late tanu download
http://www.friendlyarm.net/dl.php?file=arm-qtopia-2.2.0_20100108.tgz
Qt Designer is included.
Simon, please check #include. Did you miss <> signs?
I missed them in my posts. Will correct it ASAP
#include
#include "MainWindowImp.h"
Regards
s_stavrev
Hi,
ОтговорИзтриванеI am getting the following error:
/opt/FriendlyARM/toolschain/4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lqtopia2
collect2: ld returned 1 exit status
make: *** [stivlib] Error 1
Could anyone help me in resolving the issue?
Thanks in advance...
Този коментар бе премахнат от автора.
ОтговорИзтриванеHi,
ОтговорИзтриванеThanks for this tutorial. I need help with Touchscreen.
I compiled Qt and tslib successfully.
Typing "cat /dev/input/ts" works as mentioned (weird chars when touched).
ts_calibrate and ts_test work fine too (touch screen is working fine).
If I use "export QWS_MOUSE_PROTO=tslib:/dev/input/ts" it shows "Segmentation fault". When I replace this line by just "export QWS_MOUSE_PROTO=" (without "driver:options") my "Hello World" shows perfectly, but no touch screen.
Compiling Qt with "-no-freetype" generates the same result: "Segmentation fault".
I can't find a way to work touch with my app.
Any suggestion?
Thank you.
Afonso.
it works, how can I add button and signal ?
ОтговорИзтриванеthanks
I tried to add another button but confuse on how to put the signal, do you know how to do it ?
ОтговорИзтриванеthanks
I am created a same application in qt but problem generated in run time not search the various lib in mini2440
ОтговорИзтриване