前段时间为了完成毕设,所以选择了mini2440作为平台进行开发,在此过程中我自己学习了QT编程。今天就谈谈自己的学习心得:
主机环境:虚拟机安装Redhat5(企业版)
编译工具:arm-linux-gcc-4.3.2
QT版本:Qtopia-2.2.0
第一步:首先安装Qtopia-2.2.0
(1).建立目录:在opt下建立/FriendlyARM/mini2440目录。
(2).把arm-qtopia-20100108.tar.gz和x86-qtopia-20100108.tar.gz拷贝到mini2440下运行:
#tar xvzf arm-qtopia-20100108.tar.gz
#tar xvzf x86-qtopia-20100108.tar.gz
(3)这是我们在mini2440下看到两个文件夹x86-qtopia和arm-qtopia,分别进入两个文件夹分别执行以下命令:
#./build-all
完成编译。编译通过那么说明安装成功。
第二步:x86下的QT编程:该部分有两种方法可以进行编程
第一部分:利用xxx.cpp和xxx.h来设计图形化界面。
(1).进入x86-qtopia中建立工程目录,把xxx.h和xxx.cpp拷贝至如下目录。
(2).设置环境变量:执行#source /opt/FriendlyARM/mini2440/x86-qtopia/qtopia-2.2.0-FriendlyARM/setQpeEnv
(3).创建工程:#progen -t app -o xxx.pro (注意这里的progen命令在/opt/qtopia-2.2.0-FriendlyARM/tmake/bin/progen 目下,所以得进入这个目录然后执行#progen -t app -o xxx.pro命令,此时会在此目录下生成xxx.pro工程文件 )
(4).修改xxx.pro文件,为其中的SOURCES=xxx.cpp HEADERS=xxx.h TARGET=xxx若有多个就用空格隔开。
(5).生成Makefile
a.查看环境变量:#echo $TMAKEPATH查看结尾是否为/qws/linux-generic-g++。
b.若不是进行以下修改:修改tmake/lib/qws/linux-generic-g++/tmake.conf将TMAKE_LINK=gcc和TMAKE_SHLIB=gcc中的gcc改为g++ (注意这里的tmake.conf文件 在 /opt/qtopia-2.2.0-FriendlyARM/tmake/lib/qws/linux-generic-g++目录下)
c.生成Makefile:#tmake -o Makefile xxx.pro。
d.修改Makefile:添加库路径:LIBS=-L$(QPEDIR)/lib -lqte -lm -lqtopia2 -lqtopia -lqpe。
(6).编译:#make 后会生成可执行文件。
(7).运行:#qvfb -width 480 -height 480 &
#./可执行文件名 -qws
下面我们一起看个例子:
#include "menu.h"
1.menu.cpp文件:
MainWidget::MainWidget(QWidget *parent, const char *name): QMainWindow(parent, name)
{ //set caption and backgroundcolor
setCaption("Untitled Text");
setBackgroundColor(white);
//add items to File menu
QPopupMenu *file = new QPopupMenu;
QFont f1("Helvetica", 14, QFont::Bold);
setFont(f1);
file->setFont(f1);
file->insertItem("&New", this, SLOT(newFile()), CTRL+Key_N);
file->insertItem("&Open", this, SLOT(openFile()), CTRL+Key_O);
file->insertItem("&Save", this, SLOT(saveFile()), CTRL+Key_S);
file->insertItem("&Quit", this, SLOT(quitMain()), CTRL+Key_Q);
file->insertItem("&print",this, SLOT(printFile()), CTRL+Key_P);
file->insertItem("&save as",this, SLOT(savFile()));
//add items to Edit menu
QPopupMenu *edit = new QPopupMenu;
edit->setFont(f1);
edit->insertItem("&Copy", this, SLOT(copyCH()), CTRL+Key_C);
edit->insertItem("&Paste", this, SLOT(pasteCH()), CTRL+Key_V);
edit->insertItem("&Replace", this, SLOT(replCH()), CTRL+Key_R);
//add items to View menu
QPopupMenu *view = new QPopupMenu;
view->setFont(f1);
view->insertItem("&Toolbar", this, SLOT(toolbar()), CTRL+Key_T);
//add items to Help menu
QPopupMenu *help = new QPopupMenu;
help->setFont(f1);
help->insertItem("&Help", this, SLOT(helpFile()), CTRL+Key_H);
help->insertItem("About", this, SLOT(aboutMe()));
//Create 'File' & 'Help'& 'edit'&'view'menu
QMenuBar *menu;
menu = new QMenuBar(this);
QFont f2("Helvetica", 18, QFont::Bold);
setFont(f2);
menu->setFont(f2); //set Font
menu->insertItem("&File", file); //create 'FIle'
menu->insertItem("&Help", help); //create 'Help'
menu->insertItem("&Edit", edit); //create 'edit'
menu->insertItem("&View", view); //create 'view'
//create lebel
label = new QLabel("", this);
label->setGeometry(60, 100, 250, 20);
label->setBackgroundColor(white);
label->setFont(f1);
}
void MainWidget::printFile()
{
label->setText(" Print a file!");
}
void MainWidget::savFile()
{
label->setText("File has been saved as another file!");
}
void MainWidget::copyCH()
{
label->setText("Text has been copied!");
}
void MainWidget::pasteCH()
{
label->setText("Text has been pasted!");
}
void MainWidget::replCH()
{
label->setText("Context has been replaced!");
}
void MainWidget::toolbar()
{
label->setText("Toolbar");
}
void MainWidget::newFile()
{
label->setText("Create a New File!");
}
void MainWidget::openFile()
{
label->setText("File has been opened!");
}
void MainWidget::saveFile()
{
label->setText("File has been saved!");
}
void MainWidget::quitMain()
{
QApplication::exit();
}
void MainWidget::helpFile()
{
label->setText("Help Files, or press F1.");
}
void MainWidget::aboutMe()
{
label->setText("(C) GUANGZHOU ZHIYUAN");
}
int main(int argc, char **argv)
{
QApplication app(argc, argv);
MainWidget *mainwidget = new MainWidget(0);
mainwidget->setGeometry(10, 30, 480, 640);
app.setMainWidget(mainwidget);
mainwidget->show();
int result = app.exec();
return result;
}
ifndef _MENU_H_
#define _MENU_H_
2.menu.h文件:
#include <qapplication.h>
#include <qmainwindow.h>
#include <qpopupmenu.h>
#include <qmenubar.h>
#include <qlabel.h>
class MainWidget:public QMainWindow
{
Q_OBJECT
public:
MainWidget(QWidget *parent = 0, const char *name = 0);
public slots:
void newFile();
void openFile();
void saveFile();
void quitMain();
void helpFile();
void aboutMe();
void printFile();
void savFile();
void copyCH();
void pasteCH();
void replCH();
void toolbar();
private:
QLabel *label;
};
#endif
3.运行结果:
其实这中方法是最麻烦的一种方法,下面我们接着介绍一种简单的x86的QT程序的编译方法:
在建好项目文件夹后,把源代码拷贝到工程目录下,然后把qt示例,hello文件夹下的build拷贝到你当前工程目录下,执行#./build
一下就OK了,这个方法是最简单的,但上面的方法实际就是这种简单方法的一个过程展示,只不过第二种方法用一个shell把所有操作都涵盖了!只要操作熟练其实那种方法都差不多。
第二部分内容待续........................................
所有评论(0)