QT(一):Qt基础、简介、可视化工具、lupdate、lrelease、qmake、uic、moc、QT内存管理、QWidget界面设置函数、信号与槽、槽函数、自定义槽函数、自定义信号、信号与槽的连

一、Qt基础

1、QT的简介

1)特点

1、优良的跨平台特性

        Qt支持:Windows、Linux、Solaris、SunOS、FreeBSD、BSD/OS、SCO、AIX、OS390、QNX 、android等操作系统。

2、面向对象

        Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt提供了一种称为signals/slots的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。

3、丰富的API

        Qt包括多达500个以上的C++类,还提供基于模板的collections,serialization,file,I/0 device,directory management,date/time类。甚至还包括正则表达式的处理功能。

4、大量的开发文档

2)QT可视化工具

1、可视化工具有:Qt Designer、Qt Assistant、Qt Linguist、Qt Creator

Qt Designer:界面设计编辑工具

Qt Assistant: Qt技术文档文档浏览器

Qt Linguist:国际化语言翻译工具

Qt Creator:集成开发环境(IDE)
       可在Windows、Linux/X11和Mac OS X桌面操作系统上运行

        供开发人员针对多个桌面和移动设备平台创建应用程序。
        1、UI设计与代码开发的无缝协作

         2、支持Qt Quick开发

        3、支持移动设备上的应用开发(Android,黑莓,iOS )

        4、支持嵌入式设备开发

2、命令行程序:lupdate、lrelease、qmake、uic、moc

lupdate:根据项目文件(.pro)读取源码中需要翻译的内容生成翻译文件(.ts)
                        lupdate xxx. pro
        将生成或更新项目文件中的翻译源文件ts文件

lrelease:把翻译文件(.ts)翻译成二进制的. qm文件
                        lrelease xxx.ts
        将把项目中的翻译源文件ts文件生成二进制qm文件

qmake: Makefile生成器,能根据工程文件(.pro)产生不同平台下Makefile

        

uic:把ui文件(xml语法的界面文件)自动生成相应的C++代码

moc:元对象编译器

3、Qt SDK开发包

       Qt的核心库,包含了直观的C++API以及类CSS/JavaScript编程的Qt Quick

3)QT的帮助文档:

         D:\Qt\Qt5.9.1\5.9.1\mingw53_32\bin\assistant.exe

4)QT的3大特性 

      1、信号与槽 -- 建立2个不同窗口控件的通信
      2、内存管理 --对象树,父对象负责所有的子对象的内存的管理和释放
      3、事件处理 -- 每一个用户的输入QT都会将它封装一个事件

2、QT内存管理

        使用new和delete时,,内存在堆中分配。堆内存空间必须通过delete完全释放,以防止内存泄漏。只要不delete,分配在堆上的对象可以一直存活下去。栈是系统自动分配管理的,局部变量就是来自于栈区,只要超出了作用域的栈区数据就会被自动回收。

        所有从QObject继承出来的子对象的内存管理都转移给了父对象                                                               使用new在堆上分配内存
               子对象可自动被父对象删除内存                                                                                                         手动删除不会引起二次删除,子对象删除时会通知父对象

        没有父对象的对象需要手工删除
                没有父对象的对象一般分配在栈区,这样可以有效避免内存泄漏

        Qt没有自动回收站的机制,需要关注父子关系及其功能

二、QT的工程文件      

helloQT.pro:

      

1、QWidget界面设置

    setLayout(QLayout *)  ---- 设置整体布局
    setFixedSize(int w, int h) --- 设置固定大小
    setFixedHeight(int)    --- 设置固定高度
    setFixedwidth(int)    --- 设置固定宽度
    setMaximumSize(int w, int h);   ---- 设置最大宽高
    setMinimumSize(int w, int h);   ---- 设置最小宽高
    setFont(QFont)     ---- 设置字体
    setWindowTitle(QString)  --- 设置窗口的标题
    setWindowIcon(QIcon)   --- 设置图标
    show()   --- 显示界面
    hide()   --- 隐藏界面
    close()  --- 关闭界面      

2、信号与槽

槽函数

        槽函数是普通的C++成员函数,可以被正常调用;槽函数可以有返回值,也可以没有。
        槽函数的访问权限三种: public slots、private slots和protected slots                                                  槽函数的存取权限决定了谁能够与其相关联                                                                                      头文件中中声明
                Q_OBJECT......
            public slots:
            void myslot () ;
            void myslot(int x);
            void myslot(int x,int y);

当信号产生时,就会自动调用绑定的槽函数
绑定信号与槽:
 connect(产生信号的对象指针(谁产生信号),信号,处理信号的对象指针(谁调用槽函数),槽函数)
//信号连接到槽

connect(stu,SIGNAL(slot_class_is_over()),tea, SLOT(signal_class_is_over()));

//一个信号连接到多个槽

connect(stu,SIGNAL(slot_class_is_over(QString)),tea, SLOT(signal_class_is_over())); connect(stu,SIGNAL(slot_class_is_over(QString)),tea,SLOT(signal_class_is_over(QString)));

//方式一:QT4的方式,信号和槽函数都携带了参数的信息,对信号和槽函数有重载的情况,一定使用这种方式
        connect(pb, SIGNAL(clicked(bool)), this, SLOT(槽函数()));


 //方式二:QT5的连接方式
        connect(pb, &QPUshButton::clicked, this, &Widget::槽函数);


  //方式三:使用拉姆达方式连接

 connect(pb, &QPUshButton::clicked, [=](槽函数参数){
            函数体
        });



  

自定义槽函数:

        声明:类中的slots标签之下
        定义:通常放在cpp中
        
    

自定义信号:

        *只声明不定义
        类中需要添加O_OBJECT宏
        声明:
            signals标签之下进行声明
        定义:
            信号不需要定义
        发射信号:
            emit 信号();
            emit 信号(参数1, 参数2, ....);
            信号可以有参,当槽函数需要参数时由信号给它传递

槽函数的参数:


        槽函数的参数是由信号传递
        槽函数的参数个数 <= 信号的参数个数
        槽函数的参数类型与对应的信号的参数类型一致     

信号与槽对应关系:


        1对1:一个信号对应一个槽函数
        1对多:一个信号可以对应多个槽函数,当信号产生时所有绑定的槽函数按顺序执行
        多对1:多个信号可以对应一个槽函数,只有其中任何一个信号产生都会调用一次这个槽函数
  

 解除绑定:
        disconnect
        

信号绑定信号:
        connect(pb1, SIGNAL(clicked(bool)), pb2, SIGNAL(clicked(bool)));   

当pb1信号产生时,会自动触发pb2的信号。反之不会

  • 28
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt中实现国际化和多语言切换需要以下步骤: 1. 在Qt项目中创建一个“ts”文件,用于存储翻译后的资源。可以使用Qt自带的工具“Qt Linguist”来创建和编辑这些文件。 2. 在Qt项目中使用Qt的翻译API来翻译界面元素。例如,使用tr()函数来标记需要翻译的字符串。 3. 使用lupdate工具来生成一个“.ts”文件,其中包含需要翻译的所有字符串。 4. 使用Qt Linguist编辑器来翻译这些字符串,并将它们保存到“.ts”文件中。 5. 使用lrelease工具来生成一个二进制的翻译文件“qm”文件,其中包含翻译后的资源。 6. 在Qt项目中加载这些翻译文件,并在运行时切换语言。 下面是一个简单的示例代码,演示如何在Qt中实现多语言切换: ```cpp #include <QApplication> #include <QTranslator> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 加载翻译文件 QTranslator translator; translator.load("myapp_zh.qm"); app.installTranslator(&translator); // 设置界面元素的翻译 QLabel label(tr("Hello World!")); label.show(); return app.exec(); } ``` 在上面的例子中,我们使用了QTranslator类来加载翻译文件,并使用installTranslator()函数将其安装到应用程序中。我们还使用了tr()函数来标记需要翻译的字符串。 当应用程序启动时,它将自动加载当前系统语言对应的翻译文件。如果用户切换了语言,我们只需要重新加载对应的翻译文件即可。 希望这可以帮助你实现Qt中的国际化和多语言切换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值