【Qt编程】- 基本项目


 用向导生成一个框架

【Qt编程】- 基本项目_第1张图片

【Qt编程】- 基本项目_第2张图片


一共生成这么多文件:

【Qt编程】- 基本项目_第3张图片


从mainwindows.ui生成的ui_mainwindow.h没有显示在项目列表里面


我的qtwidget.pro内容如下:


#-------------------------------------------------
#
# Project created by QtCreator 2014-05-23T16:22:29
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = qtwidget
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

添加资源文件


【Qt编程】- 基本项目_第4张图片


【Qt编程】- 基本项目_第5张图片

【Qt编程】- 基本项目_第6张图片


修改布局和添加控件


开始拖拽控件,布局,结果如下。

【Qt编程】- 基本项目_第7张图片


添加翻译文件


中文的,如果要添加其他语言的,用空格分开。

#-------------------------------------------------
#
# Project created by QtCreator 2014-05-23T16:22:29
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = qtwidget
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

RESOURCES += \
    qtwidget.qrc

TRANSLATIONS += zh_CN.ts

添加好以后,在 工具 -> 外部 -> qt语言家 -> 更新语言

启动外部工具'C:/Qt/4.8.6/bin/lupdate.exe' C:/Qt/test/qtwidget/qtwidget.pro
Updating 'zh_CN.ts'...

    Found 7 source text(s) (7 new and 0 already existing)

'C:/Qt/4.8.6/bin/lupdate.exe' 完成
启动外部工具'C:/Qt/4.8.6/bin/lupdate.exe' C:/Qt/test/qtwidget/qtwidget.pro
Updating 'zh_CN.ts'...

    Found 7 source text(s) (0 new and 7 already existing)

'C:/Qt/4.8.6/bin/lupdate.exe' 完成


lupdate.exe 可以从pro文件里面解析源文件和ui文件,来提取要翻译的字条,同时提取翻译文件名字,比如zh_CN.ts


用bin目录下的linguist.exe来翻译这个文件比较方便。

【Qt编程】- 基本项目_第8张图片


翻译完一条,按下ctrl+Enter确认

全部翻译完成以后,可以保存,并发布,也可以回到ide里面 工具 -> 外部 -> qt语言家 ->发布翻译

调用lupdate.exe 发布zh_CN.ts 以后就得到zh_CN.qm 


管理好资源


如果在项目根目录下放置许多的ts文件,看起来肯定不舒服,再加上后来的各种各样的images,项目资源管理就会比较混乱


建议建立一个lang文件夹放置各式的ts和qm文件


建立image文件夹放置图片文件


【Qt编程】- 基本项目_第9张图片


修改pro文件

#-------------------------------------------------
#
# Project created by QtCreator 2014-05-23T16:22:29
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = qtwidget
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

RESOURCES += \
    qtwidget.qrc

TRANSLATIONS += ./lang/zh_CN.ts

指定ts文件放置到lang目录下

启动外部工具'C:/Qt/4.8.6/bin/lupdate.exe' C:/Qt/test/qtwidget/qtwidget.pro
Updating 'lang/zh_CN.ts'...

    Found 7 source text(s) (0 new and 7 already existing)

'C:/Qt/4.8.6/bin/lupdate.exe' 完成

在资源文件里面添加资源

首先添加一个/前缀,因为访问的时候要用到":/" , 等下看例子就知道了

【Qt编程】- 基本项目_第10张图片


控件美化


有了资源以后,就可以从资源文件里面给控件设置位图了。

【Qt编程】- 基本项目_第11张图片


加载多语言支持

#include "mainwindow.h"
#include <QApplication>
#include <QTranslator>

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

    QTranslator * translator = new QTranslator(&a);
    if (translator->load(":/lang/zh_CN"))
    {
        a.installTranslator(translator);
    }

    MainWindow w;
    w.show();

    return a.exec();
}

添加信号和槽连接

【Qt编程】- 基本项目_第12张图片


在mainwindow.h&.cpp里面添加close() 槽

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void on_loginBtn_clicked();
    bool close();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

bool MainWindow::close()
{
    //qDebug("");
    QLineEdit * user = this->findChild<QLineEdit*>("userEdit");
    qDebug(user->text().toStdString().c_str());
    ((QMainWindow *)this)->close();
    return true;
}

有两种方式添加信号和槽的连接,一种是在UI文件视图的下方列表里面添加,在指定了slot以后,如果要处理自定义的slot,可以重载一下父类QMainWindow的slot,比如上个例子中的close()函数。

还有一个方法是在mainwindow里面指定一个“特殊命名”的槽函数,比如,on_loginBtn_clicked(),

还那么,在ui->setupUI()里面会调用

QMetaObject::connectSlotsByName(MainWindow);

把这些特殊的槽函数按照解析的名字部分做signal和slot的连接。


保存用户输入到文件

bool MainWindow::close()
{
    QComboBox * addr = this->findChild<QComboBox*>("serverList");
    QLineEdit * user = this->findChild<QLineEdit*>("userEdit");
    QLineEdit * pass = this->findChild<QLineEdit*>("passEdit");

    QFile fout("login.conf");
    fout.open(QIODevice::WriteOnly | QIODevice::Text);
    QTextStream foutstrm(&fout);
    foutstrm<<"addr="<<addr->lineEdit()->text()<<"\r\n";
    foutstrm<<"user="<<user->text()<<"\r\n";
    foutstrm<<"pass="<<pass->text()<<"\r\n";
    fout.close();

    ((QMainWindow *)this)->close();

    return true;
}



你可能感兴趣的:(GUI,basic,qt,widget,sample,qmake)