从零开始学习QT Creator(作者:developCpp)

1.从Hello World开始
见很多新人问如何使用QT Creator
感觉还是抽点时间出来,写一个QT Creator使用帮助吧

首先下载,地址如下
http://get.qt.nokia.com/qtsdk/qt-sdk-win-opensource-2009.05.exe

安装很简单,直接默认,点下一步即可

安装好之后,打开QT Creator
新建工程 File => New File or Project..
选择Projects => Empty QT4 Project
输入工程名, Name, 例如 Hello
储存位置Creat in, 例如 D:/QT/Sample/

按下Next, 这里刚开始学习,只要默认即可,一路Next下去,最后Finish

这时, QT Creator自动创建一个Hello.pro文件

打开此Hello.pro文件
写入
TARGET = hello
TEMPLATE = app
SOURCES += main.cpp

然后右键Hello工程名, 选择菜单 Add New
选择 C++ => C++ Source File, 按下OK
输入源文件名Name: main.cpp

打开main.cpp, 写一个简单的Hello world程序吧

#include <QApplication>
#include <QLabel>

int main(int argc,char *argv[])
{
    QApplication app(argc,argv);
    QLabel *label=new QLabel("Hello world!");
    label->show();
    return app.exec();
}

按下菜单 Build => Run编译运行
---------------------------------------------------华丽的分割线----------------------------------------------------------

2.debug和release
让我们打开文件夹D:/QT/Sample/ 看看吧
除了工程文件hello.pro和源文件main.cpp, 又多了好多文件和文件夹
这些都是临时文件和编译文件, 试一下,删除这些文件和活页夹
只留下两个hello.pro和main.cpp
打开QT Creator, 选择菜单 File => Open File or Project
选择hello.pro文件, 打开

然后编译运行, 又出现了一大堆文件
其中还有两文件夹debug和release
打开文件夹debug, 你会发现hello.exe和main.o
而release文件夹中是空的
选择菜单 Build => Set Build Configuration 子菜单有debug和release
这是两种编译模式, 点选release再编译, 就会在release文件夹中产生编译后的文件
你会发现release比debug文件更小,
因为debug中包含了除错调试代码,而release没有
当你的程序正式发布的时候,需要选择release
---------------------------------------------------华丽的分割线---------------------------------------------------------- 
3.最简单的Dialog程序

以前学VC的时候就是从对话框程序开始的,
现在QTCreator一切照旧, 继续

新建一個空工程
File => New File or Project.=> Projects => Empty QT4 Project
Name为mydlg
Create in为D:/QT/sample/

右键工程名mydlg,选择菜单Add New
选择C++ => C++ Source File, 命名为main.cpp

这里因为要建立一个对话框
所以需要建一个对话框类以及资源文件ui, 就像VC中的rc

再添加一个C++源文件和一个头文件,操作如下
Add New => C++ => C++ Source File, 命名为Dialog.cpp
Add New => C++ => C++ Header File, 命名为Dialog.h

再添加一个资源文件ui
Add New => QT => Qt Designer Form, 这里选择一个样色
习惯VC6的朋友可以选择templates/form => Dialog with Buttons Right
在下放选择Embedded Design,我们选择默认选项
这里新手有空可以每种样色都玩一玩
然后Next, 命名为Dialog.ui保存

OK,文件建好了,开始写入代码吧
打开mydlg.pro,写入以下代码

TARGET = mydlg
TEMPLATE = app
SOURCES += main.cpp /
    dialog.cpp
HEADERS += dialog.h
FORMS += dialog.ui

这里如果一种类型有多个文件,可以用斜杠换行隔开
打开各Dialog.h输入代码如下

#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
namespace Ui
{
    class Dialog;
}
class Dialog : public QDialog
{
    Q_OBJECT
public:
    Dialog(QWidget *parent = 0);
    ~Dialog();
protected:
    void changeEvent(QEvent *e);
private:
    Ui::Dialog *ui;
};

#endif // DIALOG_H

打开Dialog输入代码如下

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
}

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

void Dialog::changeEvent(QEvent *e)
{
    QDialog::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

打开main.cpp输入代码如下

#include <QtGui/QApplication>
#include "dialog.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();
    return a.exec();
}

此时 Build => Run 会看到一个简单的窗口
如何在其上面做动作呢? OK,我们再来

打开 Dialog.ui
拖一个PushButton,放于窗口上,右键它,选择菜单 Go to slot
这时会弹出一个对话框,选择Clicked(),按下OK

这时会自动写入一个成员函数到Dialog类
如下
void Dialog::on_pushButton_clicked()
{
   
}
在其中写入代码,如下
void Dialog::on_pushButton_clicked()
{
    QMessageBox::information( this, "mydlg",
        "hello world" );
}
在最上放加个头文件 #include <QMessageBox>

Build => Run 运行一下看看
点那个按钮会弹出一个消息框哦
---------------------------------------------------华丽的分割线----------------------------------------------------------
4.UI文件
可能有的新人会对ui文件有点迷惑,特别是只学过命令行模式编程的学生
ui文件是个什么格式呢? 它是如何被编译器识别和编译的呢?
我们打开QTCreator,新建一个Dialog工程
File => New File or Project => Projects => Qt4 Gui Application
按下OK,命名Name为text,保存在D:/QT/sample/
按两次Next, 选择Base Class为QDialog,按下一步,完成

这时会自动生成一个Dialog类型的工程
右键工程下的Forms => Dialog.ui, 选择菜单Open With => Plain TextEditor
你会发现ui文件格式为XML,
如下
<ui version="4.0">
<class>Dialog </class>
<widget class="QDialog" name="Dialog" >
  <property name="geometry" >
  <rect>
    <x>0 </x>
    <y>0 </y>
    <width>600 </width>
    <height>400 </height>
  </rect>
  </property>
  <property name="windowTitle" >
  <string>Dialog </string>
  </property>
</widget>
<layoutDefault spacing="6" margin="11" />
<pixmapfunction> </pixmapfunction>
<resources/>
<connections/>
</ui>
但C++编译器又是如何编译XML格式的ui文件呢
打开D:/QT/sample/test/
这里有5个文件,有工程文件,源文件,头文件以及ui文件
分别是test.pro,main.cpp,dialog.cpp,dialog.h,dialog.ui
现在回到QTCreator编译这个工程
再看D:/QT/sample/test/
你看到,除了之前产生的那些临时的文件夹和文件
还多了一个ui_dialog.h
打开ui_dialog.h
这是一个从ui文件产生的一个头文件
也就是将XML格式的ui文件转换成编译器可以处理的源代码文件,
然后再编译

返回ui,在其窗口上加上一个PushButton,
在其下方的Signals Slots Editor中,点"+"号按钮,增加一个信号槽
Sender选择PushButton
Signal选择clicked
Receiver选择Dialog
Slot选择close
意思是按下这个按钮,就关闭对话框

保存关闭dialog.ui,改用Plain TextEditor打开它
你会发现多了一个连接
如以下代码
<connections>
  <connection>
  <sender>pushButton </sender>
  <signal>clicked() </signal>
  <receiver>Dialog </receiver>
  <slot>close() </slot>
  <hints>
    <hint type="sourcelabel">
    <x>107 </x>
    <y>141 </y>
    </hint>
    <hint type="destinationlabel">
    <x>299 </x>
    <y>199 </y>
    </hint>
  </hints>
  </connection>
</connections>
其中不难理解sender,signal,receiver,slot

返回ui再加上一个PushButton,右键它,选择菜单Go to Slot, 然后选clicked
如此Dialog类增加了一个自定义的成员函数
void Dialog::on_pushButton_2_clicked()
{
   
}

但是用Plain TextEditor打开dialog.ui后会发现没有上一个PushButton的连接connections
打开ui_dialog.h也没有发现与此相关的连接
---------------------------------------------------华丽的分割线----------------------------------------------------------
5.To jpchen609 & wxdcxp
这里只是介绍一下怎么添加源文件而已

也许我真不应该发这个帖子
这个IDE的使用真没啥可写的,点点看看就会了
至于QT库的使用,可以看 <C++ GUI Programming with Qt 4>

我再介绍一下动态编译和静态编译的问题吧,就当是散分了

QT Creator默认是动态编译,发布时需要打包多个dll进来,
在windows下很多人希望只有一个exe即可运行于任何电脑上

改用静态编译很简单,在开始菜单打开Qt Command Prompt
输入configure -release -static -fast 按回车,然后选择是商业版还是社区版本
然后就输入mingw32-make开始编译了,时间很长,
如果在C盘需要注意硬盘大小,编译之后的C:/Qt/2009.05有两个多G
完成之后用mingw32-make clean删除编译产生的临时文件,这样C:/Qt/2009.05这个文件夹会缩小到1.5G左右
打开QT Creator之后在Build => Set Build Configuration设置为release,
编译之后的exe将完全包含了QT类库,大小是8M多点
此时拷贝到其他电脑还需要mingwm10.dll,如果想只要一个exe即可运行,则需要设置编译去除mthreads选项
因为只有用到thread的时候才会需要mingwm10.dll
其实也不需要如此,因为mingwm10.dll也只有11KB大小而已

好了不多说了,浪费了大家的时间我感到很抱歉!
---------------------------------------------------华丽的分割线----------------------------------------------------------
 
6.实在抱歉,最近琐事缠身,现在才...

先说多窗体吧, 大致说下, 这里我就不细讲了,因为很简单.

打开QT Creator, 新建一个Gui Application,全部默认下一步,该怎样怎样,然后完成

建好工程,右键工程名(这里是最上面的黑体的工程名,不是.pro文件) => Add New => QT Designer Form

然后 Next , Next , Finish 就新建了一个名叫Dialog的对话框

打开Dialog.ui, 在上面放一个Text Edit和一个PushButton
同样打开mainwindow.ui,放一个Text Edit 和 PushButton

打开Dialog.h, 给Dialog Class加上两个成员函数如下
class Dialog : public QDialog {
........
public:
    void SetText(QString m_Text);
    QString GetText();
.......
};
打开Dialog.cpp, 最下面写入如下代码
void Dialog::SetText(QString m_Text)
{
    ui->textEdit->setText(m_Text);
}
QString Dialog::GetText()
{
    return ui->textEdit->toPlainText();
}
打开mainwindow.ui,右键那个PushButton => Go to Slot => 选择clicked => OK
就会进入mainwindow.cpp,并且自动产生一个成员函数如下
void MainWindow::on_pushButton_clicked()
{
}
在mainwindow.cpp最上面加如下代码
#include "dialog.h"

在成员函数中加入如下代码
void MainWindow::on_pushButton_clicked()
{
    Dialog dlg(this);
    dlg.SetText("Hello World");
    if(dlg.exec()==QDialog::Accepted)
    {
        ui->textEdit->setText(dlg.GetText());
    }
}
编译运行, 就可以在两个窗体之间相互传递值了

补充:
如果只是在两个窗口之间,传递单个控件的值,则只需要将其指向控件的指针设置为public即可,如下
class Dialog : public QDialog {
.......
public:
    QTextEdit *m_edit;
.........
};
然后在构造函数中将其指向ui->控件地址,如下
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    m_edit=ui->textEdit;
}
然后在两个窗口间传递此控件就会简单了, 如下
void MainWindow::on_pushButton_clicked()
{
    Dialog dlg(this);
    //dlg.SetText("Hello World");
    dlg.m_edit->setText(ui->textEdit->toPlainText());
    if(dlg.exec()==QDialog::Accepted)
    {
        //ui->textEdit->setText(dlg.GetText());
        ui->textEdit->setText(dlg.m_edit->toPlainText());
    }
}

如果是在两个窗口间传递多组值,以及夹带一些算法,则用第一种为子窗口增加成员函数的方法会很简单
 
---------------------------------------------------华丽的分割线----------------------------------------------------------
7.下面介绍数据库

以前在windows下最简单最常用的是Access数据库
但是现在不同了,sqlite比Access还要简单,只有一个文件到处可运行,也不需要Office支持^_^

有的新手对这快可能有点疑惑, 所以分开讲,一步一步来

打开QT Creator,新建一个空工程,Empty Qt4 Project
Name为sql_sample
Creator in为D:/QT/sample/
然后Next Finish

右键工程名sql_sample => Add New => C++ Source File 取名main.cpp

打开main.cpp输入如下代码
#include <QApplication>
#include <QtSql>
#include <QTableView>
#include <QMessageBox>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

//先看看数据库文件是否存在
    bool IsExist=QFile::exists("mydb.dat");
//连接数据库,如果不存在则新建一个
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("mydb.dat");
    if(!db.open())
    {
//如果无法打开则报错
        QMessageBox::warning(0,"title","打开数据库失败");
        return 1;
    }
//如果是新建的数据库,先初始化,建个表,输入一点点内容
    if(IsExist==false)
    {
        QSqlQuery query;
        query.exec("create table t_user(f_id,f_name,f_phone);");
        query.exec("insert into t_user(f_id,f_name,f_phone)values(1,'kenneth','87654321');");
        query.exec("insert into t_user(f_id,f_name,f_phone)values(2,'cindy','123456');");
        query.exec("insert into t_user(f_id,f_name,f_phone)values(3,'mike','888777');");
    }
//一般数据库表中的内容用QTableView显示比较好,就像VC中的CListView
    QSqlQueryModel *model = new QSqlQueryModel;
    model->setQuery("select * from t_user");
    model->setHeaderData(0, Qt::Horizontal, "ID");
    model->setHeaderData(1, Qt::Horizontal, "Name");
    model->setHeaderData(2, Qt::Horizontal, "Phone");

    QTableView *view = new QTableView;
    view->setWindowTitle("QSqlQueryModel");
    view->setModel(model);
    view->show();

    db.close();

    return app.exec();
}

打开sql_sample.pro,输入如下
QT      += sql
TARGET = sql_sample
TEMPLATE = app
SOURCES += main.cpp

注意第一行 "QT += sql",这是加入对数据库模块的支持,必须要有噢

编译运行,看看效果

 

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值