前段时间为了完成毕设,所以选择了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把所有操作都涵盖了!只要操作熟练其实那种方法都差不多。

第二部分内容待续........................................

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐