使用QtCreator创建Qt工程

前面一篇文章记录了Qt库文件和开发相关工具的编译,现在就来使用这些东东来写一实用的GUI。

一、使用QtCreator—V2.4.1创建工程

①配置编译工具:Tools-->Options-->Build & Run -->QtVersion/Tool Chains

############################   添加之前编译生成的qmake,这个用来生成Makefile文件   ######################################################################

#################################添加编译工具gcc的g++#####################################################################

编译器版本:

gcc-4.6.3和交叉编译器gcc4.4.3

②新建一个工程:

###################################################################################################################################

################################### Next之后就来到下面这个对话框 ##############################################################################

之后的操作除了根据自己的情况改改名字之外一路Next,直到finish。

一个Qt工程就新建完成! ^_^

二、下面记录自己写的一个串口接收GUI工程串口接收

硬件平台:arm9--tq2440开发板

Linux内核版本:2.6.30.4

工程文件一览:

具体的代码实现

①窗口类文件:

mainwindow.h 

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QString>
#include "thread.h"

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QString s_buf;

private slots:
    void show_rec(); //用于显示接收的数据

    void on_textBrowser_highlighted(const QString &arg1);

    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

private:
    Ui::MainWindow *ui;
    MyThread *threadA;  //声明一个线程
    unsigned int count;
};

#endif // MAINWINDOW_H

mainwindow.cpp
:是对mainwindow.h文件里边类成员的实现

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <strings.h>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("调试界面");

    /* thread */
    threadA = new MyThread;
    threadA->Flag_stop = 1; // do not open uart
    count =0;
    threadA->start();

    connect(threadA,SIGNAL(finished()),this,SLOT(show_rec()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_textBrowser_highlighted(const QString &arg1)
{
    count++;
    ui->textBrowser->setText(arg1);  //在textBrowser上显示接收到的字符
    ui->textBrowser->moveCursor(QTextCursor::End);//将最新的信息显示在窗口
    memset(threadA->rec_buf,'\0',sizeof(threadA->rec_buf)); //将src_buf数组清空
    /* 下面是为了处理可能是textBrowser缓冲区不够卡死的情况 */
    if(count == 40)
    {
        count =0;
        s_buf ="";
        ui->textBrowser->setPlainText("");
    }
}

void MainWindow::show_rec()
{
    QString tmp=threadA->rec_buf;   //将字符型数组转化成Qstring型
    s_buf = s_buf+tmp;              //累积所有收到的字符
    on_textBrowser_highlighted(s_buf);
}

/*****************************************
 ***open 按键槽函数
 ***功能:改变状态标识使线程进行读串口数据
 ******************************************/
void MainWindow::on_pushButton_clicked()
{
    threadA->Flag_stop = 0;
}

/*****************************************
 ***close 按键槽函数
 ***功能:改变状态标识使线程停止读串口数据
 ******************************************/
void MainWindow::on_pushButton_3_clicked()
{
    threadA->Flag_stop = 1;
}

/*****************************************
 ***clear 按键槽函数
 ***功能:改变状态标识清除显示
 ******************************************/
void MainWindow::on_pushButton_2_clicked()
{
    s_buf ="";
    ui->textBrowser->setPlainText("");

}

在这背后还有一个工程自动帮忙生成的头文件叫ui_mainwindow.h在默默工作:他是由QtCreator自带的designer工具生成的,就在我们使用了一些控件之后

/********************************************************************************
** Form generated from reading ui file 'mainwindow.ui'
**
** Created: Sun Apr 12 21:52:59 2015
**      by: Qt User Interface Compiler version 4.5.3
**
** WARNING! All changes made in this file will be lost when recompiling ui file!
********************************************************************************/

#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QHeaderView>
#include <QtGui/QMainWindow>
#include <QtGui/QPushButton>
#include <QtGui/QSpinBox>
#include <QtGui/QTabWidget>
#include <QtGui/QTextBrowser>
#include <QtGui/QToolBar>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
    QWidget *centralWidget;
    QTabWidget *tabWidget;
    QWidget *tab;
    QTextBrowser *textBrowser;
    QPushButton *pushButton;
    QPushButton *pushButton_2;
    QSpinBox *serl;
    QPushButton *pushButton_3;
    QWidget *tab_2;
    QToolBar *mainToolBar;

    void setupUi(QMainWindow *MainWindow)
    {
        if (MainWindow->objectName().isEmpty())
            MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
        MainWindow->resize(304, 212);
        centralWidget = new QWidget(MainWindow);
        centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
        tabWidget = new QTabWidget(centralWidget);
        tabWidget->setObjectName(QString::fromUtf8("tabWidget"));
        tabWidget->setGeometry(QRect(0, 0, 291, 191));
        tab = new QWidget();
        tab->setObjectName(QString::fromUtf8("tab"));
        textBrowser = new QTextBrowser(tab);
        textBrowser->setObjectName(QString::fromUtf8("textBrowser"));
        textBrowser->setGeometry(QRect(0, 0, 221, 161));
        pushButton = new QPushButton(tab);
        pushButton->setObjectName(QString::fromUtf8("pushButton"));
        pushButton->setGeometry(QRect(230, 50, 51, 27));
        pushButton_2 = new QPushButton(tab);
        pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));
        pushButton_2->setGeometry(QRect(230, 90, 51, 31));
        serl = new QSpinBox(tab);
        serl->setObjectName(QString::fromUtf8("serl"));
        serl->setGeometry(QRect(230, 10, 51, 27));
        pushButton_3 = new QPushButton(tab);
        pushButton_3->setObjectName(QString::fromUtf8("pushButton_3"));
        pushButton_3->setGeometry(QRect(230, 130, 51, 27));
        tabWidget->addTab(tab, QString());
        tab_2 = new QWidget();
        tab_2->setObjectName(QString::fromUtf8("tab_2"));
        tabWidget->addTab(tab_2, QString());
        MainWindow->setCentralWidget(centralWidget);
        mainToolBar = new QToolBar(MainWindow);
        mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));
        MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);

        retranslateUi(MainWindow);

        tabWidget->setCurrentIndex(0);

        QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi

    void retranslateUi(QMainWindow *MainWindow)
    {
        MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0, QApplication::UnicodeUTF8));
#ifndef QT_NO_STATUSTIP
        MainWindow->setStatusTip(QString());
#endif // QT_NO_STATUSTIP
        pushButton->setText(QApplication::translate("MainWindow", "open", 0, QApplication::UnicodeUTF8));
        pushButton_2->setText(QApplication::translate("MainWindow", "clear", 0, QApplication::UnicodeUTF8));
        pushButton_3->setText(QApplication::translate("MainWindow", "close", 0, QApplication::UnicodeUTF8));
        tabWidget->setTabText(tabWidget->indexOf(tab), QApplication::translate("MainWindow", "uart", 0, QApplication::UnicodeUTF8));
        tabWidget->setTabText(tabWidget->indexOf(tab_2), QApplication::translate("MainWindow", "sound", 0, QApplication::UnicodeUTF8));
        Q_UNUSED(MainWindow);
    } // retranslateUi

};

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H

②线程类文件

thread.h

//thread.h
#ifndef THREAD_H
#define THREAD_H
#include <QThread>

class MyThread:public QThread
{
	Q_OBJECT
public:
    MyThread();
    char rec_buf[30];
    volatile bool Flag_stop;

protected:
	virtual void run();
};
#endif

thread.cpp

#include "thread.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>    //串口用到的
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <strings.h>
#include <memory.h>
/* MyThread类的构造函数 */
MyThread::MyThread()
{
}

/****************************
***功能:打开串口设备文件,并进行串口设置,工作时负责读和发信号
***设置属性:115200,8,n,1
*****************************/
void MyThread::run()          //这就是线程的具体工作了
{
    int fd;
    fd = open("/dev/tq2440_serial1",O_RDWR|O_NOCTTY);
    if(fd<0)
    {
        printf("open serial error!");
    }
    struct termios opt;
    tcgetattr(fd, &opt);
    //opt.c_cc[VMIN] = 20;//设置最少接收字符数
    opt.c_iflag = 0;
    opt.c_oflag = 0;
    opt.c_lflag = 0;
    opt.c_cflag = B115200 | CS8 | CLOCAL | CREAD;//基本属性:8N1
    tcsetattr(fd, TCSANOW, &opt); //TCSANOW:the change occurs immediately,改变立即发生

    tcflush(fd,TCIFLUSH);//刷新接收缓冲区
    unsigned long i=0;
    while(1)
    {
        if(!Flag_stop)
        {
            //read receive data!!!
            read(fd,rec_buf,sizeof(rec_buf)); //无资源可读会进入睡眠
            emit finished();  //读完发一个信号。谁会接收呢?不用这里关心!
            tcflush(fd,TCIFLUSH); //清除缓冲
            printf("%ld\n",i++);
        }
        else
            tcflush(fd,TCIFLUSH);

    }
    close(fd);
    quit();
}

Linux下编译运行界面,当然这个编译工具是选择x11的那一个,不然ubuntu肯定运行不了:待会还要换回arm版本的Qt库和工具,这个操作和新建工程的一些操作大同小异,这里就不再累述。

tq2440开发板上运行的界面:这里就不上传了,手机拍了照还没拉到电脑^_^

搞定!加油!加油!一步两步一步两步!

时间: 2024-10-19 05:43:32

使用QtCreator创建Qt工程的相关文章

VC6中创建Qt工程的创建

文章来源:http://blog.sina.com.cn/s/blog_64d015c10100sf1o.html 本文主要介绍怎么创建可以在VC6中编译的QT工程.本文所采用环境为VC++6.0+QT3.3.2. 一.打开QTdesigner,,在弹出的窗口中选择new file/project标签,选中其中的C++ project,点OK按钮,出现project setting界面,输入工程名,比如说test.pro,然后点击OK,这样QT的工程就建好了.二.添加主界面,在file->new

翻译&amp;经验 创建Qt Creator Plugin 工程

Qt不支持teamCity 公司让我个实习生开发个,很变态.网上 查不到什么资料,看了看文档,都是英文的.给大家翻译下. 1选择Qt Creator Plugin 项目. Select File > New File or Project > Other Qt Project > Qt Creator Plugin > Choose. 2下一步 3看着填写就可以了,注意Qt Creator Sources是指Qt Creator 的源文件目录,Qt Creator Build指的是

Linux QtCreator 创建工程

这一天天的,都快成废物了, 每天忙得要死, 各种乱七八糟杂事,连点学习的时间都没有了, 这才一年不碰Linux,创建工程都不会了, Ubuntu 1N.N.N + QtCreator 创建工程 不安装 QtSDK 的情况下,用 apt-get 安装 cmake 然后创建工程之后,直接下一步,直到一个命令行参数的地方 加入:-DCMAKE_BUILD_TYPE=Debug OK可以调试了 或者什么都不填入

windows下VisualStudio和QtCreator搭建Qt开发环境

一.简介 集成开发平台IDE都有各自的长处,编写Qt程序可根据自己的喜好来选择相应的IDE.下述文章都是装载博友的文章,其中有很多细节还得自己调整. 二.详解 1.VisualStudio搭建Qt开发环境 Visual Studio中文官方网站 Visual Studio所有下载 (1)Visual Studio Community 2013 1.选择Community 2013,下载安装 2.安装完Visual Studio默认是英文,如果对英文不感冒的童鞋,可以下载中文语言包. 3.安装完成

创建Qt项目

创建Qt项目 1     创建Qt项目 2.1 使用向导创建 打开Qt Creator 界面选择 New Project或者选择菜单栏 [文件]-[新建文件或项目]菜单项 弹出New Project对话框,选择Qt Widgets Application, 选择[Choose]按钮,弹出如下对话框 设置项目名称和路径,按照向导进行下一步, 选择编译套件 向导会默认添加一个继承自CMainWindow的类,可以在此修改类的名字和基类.继续下一步 即可创建出一个Qt桌面程序. 2.2       手

QT基础(五)QT工程pro文件模板变量 使用

QT工程pro文件模板变量(TEMPLATE)模板变量告诉qmake为这个应用程序生成哪种makefile.下面是可供使用的选择: app - 建立一个应用程序的makefile.这是默认值,所以如果模板没有被指定,这个将被使用. lib - 建立一个库的makefile. vcapp - 建立一个应用程序的Visual Studio项目文件. vclib - 建立一个库的Visual Studio项目文件. subdirs - 这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文

在Qt工程中加Boost

摘要: Boost是一个很强大的C++库,堪比STL,里面有很多非常优秀的类库.我不多介绍,详情见官网:http://www.boost.org/ 要在我们的Qt工程中把这个库加进去应该怎么做呢?我今晚试了一下. Boost是一个很强大的C++库,堪比STL,里面有很多非常优秀的类库.我不多介绍,详情见官网:http://www.boost.org/ 要在我们的Qt工程中把这个库加进去应该怎么做呢?我今晚试了一下. 我从网上下载了Boost压缩文件,下载地址:boost_1_52_0.tar.g

Qt工程转换成VS工程 &nbsp; VS 工程转QT creator

Qt工程转换成VS工程 标签: 工程转换VS 版权声明:本文为博主原创文章,未经博主允许不得转载. 在windows下,运行Qt Command Prompt. 输入命令行: qmake -tp vc XXX.pro 会生成文件XXX.vcxproj Visual Studio的project转成QT Creator的 project 本人QT生手,最近项目上却有个需求,要将原本的Visual Studio的project转成QT Creator的project.在进行了一番研究和动手实践以及再

VS2017+Qt5.9.3,VS无法打开纯Qt工程(pro文件)

原因:之前使用的是axcontainer模块的QAxWidget,创建浏览器控件,但是在QAxWidget控件中打开网页链接时,会自动调用IE浏览器,而不是在界面上跳转到需要的对应的链接网站.准备使用webengine看一看:Qt Creator中无法识别webenginewidgets模块:必须要使用VS+Qt开发环境才可以. 1.在Qt VS Tools工具栏中无法将qt工程转为VS工程并打开: 报错:msvc-version.conf loaded but QMAKE_MSC_VER is