精华内容
参与话题
问答
  • QT——开发入门简介

    万次阅读 多人点赞 2019-02-24 16:10:43
    1、你了解Qt吗? Qt是一种基于C++的跨平台图形用户界面应用程序开发框架。如何跨平台?上到服务器上位机,下到嵌入式GUI,上天入地无所不能。Qt最早是由1991年由Qt Company开发,但是到2008年,Qt Company科技被...

    1、你了解Qt吗?

    Qt是一种基于C++的跨平台图形用户界面应用程序开发框架。如何跨平台?上到服务器上位机,下到嵌入式GUI,上天入地无所不能。Qt最早是由1991年由Qt Company开发,但是到2008年,Qt Company科技被诺基亚公司收购,是的,就是拥有着我们很多情怀的诺基亚。但在2012年,Qt又被Digia收购。等到了2014年,跨平台集成开发环境Qt Creator 3.1.0正式发布出来,至此,全面支持iOSAndroid、WP,QT的时代开始逐步展开。

    而对于嵌入式开发的我们所使用的Qt,是 Qt 的 Embedded Linux 分支平台,在原始 Qt 的基础上,做了许多出色的调整以适合嵌入式环境。删除掉了一些与嵌入式无关的Lib库,使其相对来说更加节省嵌入式平台的内存空间。

    2、Qt如何开发呢?

     

    开发要用到的东西:Qt源代码+交叉编译器+一个灵活有创造性的大脑。

    编译步骤,如下图所示:

    使用交叉编译器编译好的Qt库要在LINUX虚拟机和嵌入式开发板上各一份,有了这个库,我们就可以在上面尽情的编写Qt程序了!(如果需要触摸功能,记得要移植一个开源程序tslib,它相当于底层驱动和上层应用的皇家接口,有效的处理防抖误操作等触摸问题,有机会下次介绍)。

    Qt程序可以自己直接编写,出口成章。也可以依托于一个神器!这个神器的名字就是——集成开发环境 Qt Creator,如下图。

    Qt Creator 是一个强大的跨平台 IDE,集编辑、 编译、 运行、 调试功能于一体。它不仅有简洁方便的开发界面,同时支持图形化编程。相当于有了它,即使你不会写程序,也可以通过控件的拖拽排布,设计出一个自己喜欢的图形界面。

    3、如何编译呢?

    程序搞定了,那我们如何编译呢?

    有多种方式:

    第一,直接使用Qt qmake工具编译;

    第二,使用Qt Creator软件直接编译;

    第三,市场上的一些第三方编译工具。

    编译过程,话不多说,直接看下图,清晰明了:

    4、重要知识点

    当然,关于Qt开发,还有很多重要的知识点,你必须要知道!这里我主要讲两个。

    1)布局管理器

    如果你写过基于ARM开发的eMWIN,你一定知道我安放控件时,只需要创建一个控件,把他的颜色、形状、大小、位置全都使用参数配置好就万事大吉了。但是Qt不是这么玩的。

    它有三大法器,让它的控件布局不会因为平台改变而扭曲。那就是三种布局管理器,这是能够对窗口部件的尺寸大小和位置进行设置的对象。

    QHBoxLayout:在水平方向排列窗口部件,从左到右;

    QVBoxLayout:在垂直方向排列窗口部件,从上到下;

    QGridLayout:把各个窗口部件排列在一个网格中。

    这三个布局管理器可以各种嵌套组合,水乳交融,组合成各种复杂的布局层次。

    2) 信号与槽

    此外,在Qt海洋里,控件与控件之间,控件与嵌入式板卡之间是如何通信的呢,如何团结合作一同创造复杂的信号通信网络呢?这就要说到第二个知识点——信号与槽。

    控件与控件之前可以通过信号与槽的函数格式,将两个信号共通,参数值互相传递和改变,她就好像媒婆一样搭桥牵线。嵌入式LINUX开发的实现主要是文件的打开关闭读写,我们也可以把文件的信息传递给控件,也可以把控件的改变值写入到文件中,做到路路畅通,一路向东!

     

    好了,以上是QT开发的入门简介,去年因为有项目需求,提前针对QT做了一些功课,针对QT的一些基础开发总结整理了一些博文,有需要的可以查看哦,传送门在此

    展开全文
  • Qt 实战一二三》

    万次阅读 多人点赞 2015-12-12 18:58:04
    Qt 基础与实战,主要包含:环境搭建、信号槽、事件机制、数据类型、常用部件/布局、对话框、QPainter 绘图等内容。

    “我们来自 Qt 技术交流,我们来自 QML 技术交流”,不管你是笑了,还是笑了,反正我们是认真的。我们就是要找寻一种 Hold 不住的状态,来开始每一天的点滴分享,我们是一个有激情,有态度的部队。

    但是我们还是我们,我们只是多了一份责任。古语有云:“不积跬步无以至千里,不积小流无以成江海”,所以每一个伟大事务的产生都不是一蹴而就的。现在我们要立足眼下,把第一站放在地球,“《Qt 实战一二三》”应运而生。

    这里,我们不扯淡,只谈技术、只交流、只分享。大胆的把你的问题、建议与意见说出来!不说,憋坏了怎么办?

    | 版权声明:一去、二三里,未经博主允许不得转载。

    关于命名

    关于 Qt 系列命名,之前想了很久,想给它一个属于它自己的名字,但妄图用几个字来概括一个系列的难度,几乎不亚于重写几篇文章。

    早上,把我的想法说出来的时候,foruok 大神的一句“《Qt 实战一二三》”让我灵光一闪,那一刹那,说是醍醐灌顶也不为过,我和小伙伴们几乎同时兴奋的说,不如就用这个。

    多美妙的一句话,和我的名字一样 - 一去丶二三里,这几乎可以用来概括所有对于 Qt 实战方面的大大小小的困惑和不解。

    《Qt 实战一二三》

    以下是《Qt 实战一二三》系列的目录结构,所有的代码都经过严格自测,并通过。我会尽可能的把所有的源码都放出来,供大家方便学习、交流。。。

    项目实战部分 - 主要是讲解平时在项目中遇到的大大小小的技术点。

    你关心的,才是我要分享的!!!

    资料大全

    1. Qt 资料大全

    环境与工具

    1. 关于 Qt
    2. Qt 环境搭建(Visual Studio)
    3. Qt 环境搭建(Qt Creator)
    4. Qt5.7 + VS2015 环境搭建
    5. Linux 下搭建 Qt 环境
    6. Qt Creator 快捷键
    7. Qt 之命令行编译(nmake)
    8. Qt Creator 介绍
    9. Qt Assistant 介绍
    10. Qt Linguist 介绍
    11. Qt 之 pro 配置多个子工程/子模块
    12. Qt 之输出控制
    13. 查看和调试 Qt 源码
    14. Qt Creator 添加自定义注释

    qmake

    1. Qt 之 pro 配置详解
    2. Qt 之资源系统
    3. Qt 之添加 Windows 资源文件(.rc文件)
    4. Qt 之生成 Windows 资源文件(.rc 文件)

    对象 & 属性 & 事件

    1. Qt 之 Meta-Object 系统
    2. Qt 之属性系统
    3. Qt 之事件系统
    4. Qt 之 Timers
    5. Qt 之对象树与所有权
    6. Qt 之 findChild

    基本部件

    1. QWidget、QDialog、QMainWindow 的异同点
    2. Qt 之模式、非模式、半模式对话框
    3. Qt 之 QLabel
    4. Qt 之 QLCDNumber
    5. Qt 之 QAbstractButton
    6. Qt 之 QPushButton
    7. Qt 之 QToolButton
    8. Qt 之 QCheckBox
    9. Qt 之 QRadioButton
    10. Qt 之 QLineEdit
    11. Qt 之 QSpinBox 和 QDoubleSpinBox
    12. Qt 之 QSlider
    13. Qt 之 QProgressBar
    14. Qt 之 QDateTimeEdit
    15. Qt 之 QDateEdit和QTimeEdit
    16. Qt 之 QScrollArea
    17. Qt 之 QToolBox
    18. Qt 之 QSystemTrayIcon

    布局管理器

    1. Qt 之布局管理器
    2. Qt 之自定义布局管理器(QCardLayout)
    3. Qt 之自定义布局管理器(QFlowLayout)
    4. Qt 之自定义布局管理器(QBorderLayout)
    5. Qt 之手动布局
    6. Qt 之水平/垂直布局(QBoxLayout、QHBoxLayout、QVBoxLayout)
    7. Qt 之格栅布局(QGridLayout)
    8. Qt 之表单布局(QFormLayout)
    9. Qt 之 QStackedLayout
    10. Qt 之 QStackedWidget
    11. Qt 之 QSpacerItem
    12. Qt 之 QSizePolicy

    高级控件

    对话框

    国际化和翻译

    1. Qt 之国际化
    2. Qt 之国际化(系统文本 - QMessageBox 按钮、QLineEdit 右键菜单等)
    3. Qt 翻译原生 widgets(QTextEdit 右键菜单等)

    数据类型与数据操作类

    1. Qt 之 QFileSystemWatcher
    2. Qt 之 QDesktopServices
    3. Qt 之 QTimer
    4. Qt 之 QFileIconProvider
    5. Qt 之 QTemporaryFile
    6. Qt 之 QCryptographicHash
    7. Qt 之 qInstallMessageHandler(输出详细日志)
    8. Qt 之 qInstallMessageHandler(重定向至文件)
    9. Qt 之 qSetMessagePattern

    数据存储与获取

    1. Qt 之界面数据存储与获取

    事件

    1. Qt 之 QEvent

    QPainter 2D 图形

    1. Qt 之坐标系统
    2. Qt 之图形(QPainter 的基本绘图)
    3. Qt 之图形(渐变填充)
    4. Qt 之图形(转换)
    5. Qt 之图形(绘制文本)
    6. Qt 之图形(QPainterPath)
    7. Qt 之描绘轮廓
    8. Qt 之图形(组合)
    9. Qt 之图形(绘制漂亮的圆弧)
    10. Qt 之图形(简笔画-绘制漂亮的西瓜)
    11. Qt 之图形(简笔画-绘制卡通蚂蚁)
    12. Qt 之绘制时钟
    13. Qt 之绘制闪烁文本

    Images

    1. Qt 之 QImageWriter
    2. Qt 之 QImageReader

    进程间通信

    1. Qt 之进程间通信(IPC)
    2. Qt 之进程间通信(Windows消息)
    3. Qt 之进程间通信(共享内存)
    4. Qt 之进程间通信(QProcess)
    5. Qt 之进程间通信(TCP/IP)

    自定义界面

    1. Qt 之自定义界面(实现无边框、可移动)
    2. Qt 之自定义界面(添加自定义标题栏)
    3. Qt 之自定义界面(窗体缩放)
    4. Qt 之自定义界面(窗体缩放-跨平台终极版)
    5. Qt 之窗体拖拽、自适应分辨率、自适应大小
    6. Qt 之自定义界面(QMessageBox)
    7. Qt 之自定义界面(右下角冒泡)
    8. Qt 之自定义控件(开关按钮)
    9. Qt 之透明提示框
    10. Qt 之自定义搜索框

    Third-Party

    1. Qt 使用第三方库
    2. 基于 Qt 的图表库
    3. Qt 之 QuaZIP(zip压缩/解压缩)
    4. Qt 之 OpenSSL
    5. Qt 之 QtSoap(访问WebService)
    6. Qt 之二维码扫描
    7. Qt 之 QCustomPlot(图形库)
    8. Qt 之 QRoundProgressBar(圆形进度条)
    9. Qt 之 QProgressIndicator(等待提示框)
    10. Qt 之 QScintilla(源代码编辑器)

    项目实战

    1. Qt 之 Tab 键切换焦点顺序
    2. Qt 之密码框不可选中、复制、粘贴、无右键菜单等
    3. QDialog 之屏蔽 Esc 键
    4. Qt 之命令行参数
    5. Qt 之重启应用程序
    6. Qt 之 QFileIconProvider(根据扩展名获取文件图标、类型)
    7. Qt 之根据扩展名获取文件图标、类型
    8. Qt 之启动外部程序
    9. Qt 之提取 exe/dll/icon 文件图标
    10. Qt 之运行一个实例进程
    11. Qt 之 QTableView添加复选框(QAbstractTableModel)
    12. Qt 之 QTableView 添加复选框(QAbstractItemDelegate)
    13. Qt 之 QHeaderView 添加复选框
    14. Qt 之 QHeaderView 排序
    15. Qt 之 QHeaderView自定义排序(QSortFilterProxyModel)
    16. Qt 之 QHeaderView 自定义排序(终极版)
    17. Qt 之 QHeaderView 自定义排序(获取正确的 QModelIndex)
    18. Qt 之 QTableView 显示富文本
    19. Qt 之模型/视图(自定义进度条)
    20. Qt 之模型/视图(自定义按钮)
    21. Qt 之显示网络图片
    22. Qt 之滚动字幕
    23. Qt 之保持 GUI 响应
    24. Qt 之设置应用程序图标
    25. Qt 之保存/恢复窗口的几何形状
    26. Qt 之等待提示框(QPropertyAnimation)
    27. Qt 之等待提示框(QTimer)
    28. Qt 之等待提示框(QMovie)
    29. Qt 之字典划词
    30. Qt 之镜像旋转
    31. Qt 之窗体透明

    Qt 新版本

    1. Qt5.7 新特性

    共同进步

    进步始于交流,收获源于分享。希望一起走过的日子里,我们能够更多地交流心得,共同进步 - You are not alone。

    亲们,记住呦,后期分享的所有内容都可以随时交流。欢迎大家留言,不要吝啬你们的建议与意见,收到后我会第一时间进行回复。

    青春不老,奋斗不止!纯正开源之美,有趣、好玩、靠谱。。。

    持续更新中…

    展开全文
  • 学习使用Jenkins自动构建 学习Jenkins使用k8s执行构建;学习Jenkins声明式流水线的设计 学习Jenkins BlueOcean使用;学习Jenkins图形化创建Pipeline 学习Jenkins账号管理
  • QT/C++从新手到老手系列之QT基础篇

    万人学习 2018-01-21 23:06:39
    本系列课程励志于带领你学习QT5/C++,从开发环境(QTCreator和VS2013两种)搭建到实际项目实战,从入门到精通。每一个部分均有理论知识介绍、接口讲解、实例代码讲解,讲解过程中不断穿插老师在开发过程中遇到的问题...
  • Qt 入门中文资料 Qt从入门到精通

    千次下载 热门讨论 2010-01-12 15:11:22
    c++ Qt中文入门教程,从Qt入门到Qt的深入研究。
  • QT基本操作(简易教程)

    万次阅读 多人点赞 2019-06-04 22:54:05
    QT 是一个跨平台的C++图形用户界面应用程序框架。 1.初步了解 2.进一步了解 3.信号和槽 4.实现两个窗口的连接 1.初步了解: 创建项目: (Widgets是部件的意思)Widgets Application 部件应用程序 (文件路径不能...

    QT 是一个跨平台的C++图形用户界面应用程序框架

    这篇文章能教会你简单的使用QT。
    1.初步了解
    2.进一步了解
    3.信号和槽
    4.实现两个窗口的连接

    1.初步了解:

    创建项目:
    在这里插入图片描述
    (Widgets是部件的意思)Widgets Application 部件应用程序
    在这里插入图片描述
    (文件路径不能存在中文)
    在这里插入图片描述
    在这里插入图片描述

    基类:
    MainWindow 主要用于PC端(windows,带菜单栏)
    QWidget 控件的基类
    QDialog 对话框

    了解一下:
    父类 || 子类
    基类 || 派生类

    会生成一个 class MyWidget : public QWidget (MyWidget继承窗口基类QWidget)

    接着下一步,完成

    在这里插入图片描述
    编译运行的方法:
    图中的箭头。
    快捷键: ctrl+r
    在这里插入图片描述

    .pro为项目文件

    
    #-------------------------------------------------
    #
    # Project created by QtCreator 2019-06-04T18:33:58
    #
    #-------------------------------------------------
    
    #模块,找模块,头文件按F1
    QT       += core gui
    
    #为了兼容QT4以前的版本
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    #应用程序的名字
    TARGET = day_011
    #指定makefile的类型,app,不用管
    TEMPLATE = app
    
    # The following define makes your compiler emit warnings if you use
    # any feature of Qt which has been marked as deprecated (the exact warnings
    # depend on your compiler). Please consult the documentation of the
    # deprecated API in order to know how to port your code away from it.
    DEFINES += QT_DEPRECATED_WARNINGS
    
    # You can also make your code fail to compile if you use deprecated APIs.
    # In order to do so, uncomment the following line.
    # You can also select to disable deprecated APIs only up to a certain version of Qt.
    #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
    
    //源文件 .cpp文件
    SOURCES += \
            main.cpp \
            mywidget.cpp
    //头文件 .h文件
    HEADERS += \
            mywidget.h
    

    右键点击.pro文件→在Explorer中显示
    在这里插入图片描述
    自动生成build…

    .h头文件

    会生成类MyWidget

    #ifndef MYWIDGET_H
    #define MYWIDGET_H
    
    #include <QWidget>
    
    class MyWidget : public QWidget //光标对着QWidget,按F1跳到官方对应的文档
    {
        Q_OBJECT //构造的函数,按F4可以看到对应的.cpp是空的
        //信号与槽的时候需要
    
    public:
        MyWidget(QWidget *parent = 0);
        ~MyWidget();
    };
    
    #endif // MYWIDGET_H
    
    

    main.cpp 主函数

    #include "mywidget.h"
    //QApplication应用程序类
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        //有且只有一个应用程序类的对象
        QApplication a(argc, argv);
        //MyWidget继承于QWidget,QWidget是一个窗口基类
        //所以MyWidget也是一个窗口类
        //w就是一个窗口
        MyWidget w;
    
        //窗口默认是隐藏的,要显示出来
        w.show();
        
        //等于a.exec();return 0;
        //作用让程序一直执行,等待用户操作
        //等待事件发生
        return a.exec();
    }
    
    主要框架:
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        
        QApplication a(argc, argv);
        //我们写的代码
        return a.exec();
    }
    
    

    QT头文件的特点:

    Qt头文件没有.h
    头文件和类名一样
    前两个要大写

    QT的模块:

    在这里插入图片描述

    2.进一步了解:

    创建空项目:
    在这里插入图片描述
    只生成一个项目文件(空的)
    在这里插入图片描述
    添加新文件
    在这里插入图片描述
    名字main.cpp

    #include <QApplication>
    #include <QWidget> //窗口控件基类
    #include <QPushButton>
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        QWidget w;
        w.setWindowTitle(QString("标题")); //设置标题
    
        /*如果不指定父对象,对象和对象(窗口和窗口)没有关系,独立
         * a指定b为它的父对象,a放在b的上面
         * 指定父对象,有2种方式:
         *       1)setParent
         *       2)通过构造函数传参
         * 指定父对象,只需要父对象显示,上面的子对象自动显示
        */
    
        QPushButton b;
        b.setText("-_-"); //给按键设置内容
        b.setParent(&w); //指定父对象
        b.move(100,100); //移动坐标
    
        QPushButton b1(&w);
        b1.setText("abc");
    
        w.show();
        return app.exec();
    }
    
    

    运行结果如图:
    在这里插入图片描述
    在这里插入图片描述
    这个可以改编译环境。

    3.信号和槽

    创建一个新的项目:
    main.cpp不改变它

    #include "mainwidget.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);  //会执行到这句话
        MainWidget w;  //执行MainWidget的构造函数,所以我们的main.cpp永远不用改
        w.show();
    
        return a.exec();  
    }
    

    点击工具→选项
    在这里插入图片描述
    用UTF-8

    mainWidget.h文件:

    #ifndef MAINWIDGET_H
    #define MAINWIDGET_H
    
    #include <QWidget>
    #include <QPushButton>
    
    class MainWidget : public QWidget
    {
        Q_OBJECT
    
    public:
        MainWidget(QWidget *parent = 0);
        ~MainWidget();
    
    private:  //加上了这个
        QPushButton b1;
        QPushButton *b2;
    };
    
    #endif // MAINWIDGET_H
    

    来到mainWidget.cpp

    #include "mainwidget.h"
    #include <QPushButton>
    
    
    MainWidget::MainWidget(QWidget *parent)
        : QWidget(parent)
    {
        b1.setParent(this); //添加按键b1
        b1.setText("-_-");
        b1.move(100,100);
    
        b2 = new QPushButton(this); //指针要开内存,添加按键b2
        b2->setText("---");
    }
    
    MainWidget::~MainWidget()
    {
    
    }
    

    下面,我们开始为按钮设置功能:

    重点:信号和槽

    查看库函数
    将光标指向头文件QPushButton,按两下F1

    在这里插入图片描述
    点基类 QAbstractButton
    在这里插入图片描述
    在这里插入图片描述
    点了有对信号的描述。

    按esc退出。

    在上面的mainWidget.cpp文件中加上connect(&b1, &QPushButton:: pressed, this, &MainWidget:: close);
    即可实现按下关闭窗口。
    光标移到close按F1
    在这里插入图片描述
    [slot] 代表槽

    来看个例子:
    首先,.h文件

    #ifndef MAINWIDGET_H
    #define MAINWIDGET_H
    
    #include <QWidget>
    #include <QPushButton>
    
    class MainWidget : public QWidget
    {
        Q_OBJECT
    
    public:
        MainWidget(QWidget *parent = 0);
        ~MainWidget();
    
        void mySlot();//加了个定义函数
    private:
        QPushButton b1;  //定义变量
        QPushButton *b2;  //定义变量
    };
    
    #endif // MAINWIDGET_H
    

    main.cpp文件不变
    mainWidget.cpp文件

    #include "mainwidget.h"
    #include <QPushButton>//按F1.再按F1
    
    
    MainWidget::MainWidget(QWidget *parent)
        : QWidget(parent)
    {
        b1.setParent(this);
        b1.setText("close");
        b1.move(100,100);
    
        b2 = new QPushButton(this);
        b2->setText("---");
    
        connect(&b1, &QPushButton:: pressed, this, &MainWidget:: close);
        /* &b1:信号发出者,指针类型
         * &QPushButton:: pressed:处理的信号, &发送者的类名::信号名字
         * this:信号接收者
         * &MainWidget:: close: 槽函数,信号处理函数,&接收者类名::槽函数名字
        */
        /*自定义槽
         * Qt5任意的成员函数,普通全局函数,静态函数
         * 槽函数需要和信号一致(参数,返回值)
         * 由于信号都是没有返回值,所以,槽函数一定没有返回值
        */
       //按下b2时,b2内容变成123
        connect(b2, &QPushButton::released, this, &MainWidget::mySlot);
        //松开b2时,b1消失
        connect(b2, &QPushButton::released, &b1, &QPushButton::hide);
        
        /*信号,短信
         * 槽函数,接受短信的手机
        */
    }
    
    void MainWidget::mySlot(){  //自定义函数
        b2->setText("123");
    }
    
    MainWidget::~MainWidget()
    {
    
    }
    

    结果:
    在这里插入图片描述
    按一下:
    在这里插入图片描述

    4.实现两个窗口的连接

    新建窗口:选中项目文件夹,右击,添加新文件,c++,c++ Class,
    在这里插入图片描述
    文件夹就变成这样
    在这里插入图片描述
    这里有时候会爆出mainwidget.obj? error: LNK2019: 无法解析的外部符号 "public: __cdecl SubWidget::SubWidget(class QWidget *)…这样的错误,这时候就要将build文件删除,重新编译。

    mainwidget.h
    #ifndef MAINWIDGET_H
    #define MAINWIDGET_H
    
    #include <QWidget>
    #include <QPushButton>
    #include "subwidget.h"//子窗口头文件
    
    class MainWidget : public QWidget
    {
        Q_OBJECT
    
    public:
        MainWidget(QWidget *parent = 0);
        ~MainWidget();
    
        //void mySlot();
        void changeWin();
        void dealsub();
        void dealSlot(int,QString);  
    private:
        QPushButton b3;
    
        SubWidget subwin;//对象
    };
    
    #endif // MAINWIDGET_H
    
    
    subwidget.h
    #ifndef SUBWIDGET_H
    #define SUBWIDGET_H
    
    #include <QWidget>
    #include <QPushButton>
    
    class SubWidget : public QWidget
    {
        Q_OBJECT
    public:
        explicit SubWidget(QWidget *parent = nullptr);
    
        void sendSlot();
    signals:
        /*信号必须有signals关键字来声明
         * 信号没有返回值,但可以有参数
         * 信号就是函数的声明,只需声明,无需定义
        */
        void mySignal();
        void mySignal(int ,QString);
    
    public slots:
    
    private:
        QPushButton b;
    };
    
    #endif // SUBWIDGET_H
    
    
    mainwidget.cpp
    #include "mainwidget.h"
    #include <QPushButton>//按F1.再按F1
    #include <QDebug>  //打印
    
    MainWidget::MainWidget(QWidget *parent)
        : QWidget(parent)
    {
        setWindowTitle("boss");//等于this->setWindowTitle("boss");
    
        b3.setParent(this);
        b3.setText("切换到子窗口");
        b3.move(50,50);
    
        //显示子窗口
        //w.show();
    
        connect(&b3, &QPushButton::released, this, &MainWidget::changeWin);
    
        //处理子窗口的信号
        void(SubWidget::*funSignal)()=&SubWidget::mySignal;  //函数指针
        connect(&subwin,funSignal, this, &MainWidget::dealsub);
        void(SubWidget::*testSignal)(int, QString)=&SubWidget::mySignal; //函数指针
        connect(&subwin,testSignal, this, &MainWidget::dealSlot);
        //让窗口大小不变
        resize(400, 300);
    }
    
    void MainWidget::dealSlot(int a,QString str){
        //str.toUtf8 -> 字节数组 QByteArray
        // ...data() -> QByteArray()
        qDebug() << a << str.toUtf8().Data();
    }
    
    void MainWidget::changeWin(){
        //子窗口显示
        subwin.show();
        //本窗口隐藏
        this->hide();
    }
    
    void MainWidget::dealsub(){
        //子窗口显示
        subwin.hide();
        //本窗口隐藏
        this->show();
    }
    
    MainWidget::~MainWidget()
    {
    
    }
    
    
    subwidget.cpp
    #include "subwidget.h"
    
    SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
    {
        this->setWindowTitle("小弟");
        b.setParent(this);
        b.setText("切换到主窗口");
        b.move(50,50);
        connect(&b, &QPushButton::clicked, this, &SubWidget::sendSlot);
        //让窗口大小不变
        resize(400, 300);
    }
    
    void SubWidget::sendSlot(){
    
       emit mySignal();
       emit mySignal(250,"hello");  //重载的信息
    }
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    主要步骤:
    1.创建c++类文件。
    2.主窗口切换到子窗口
    1)在主窗口.h中声明一个按键
    2)在主窗口.cpp中创建一个按键,按键连接this
    3)在主窗口.h中声明一个函数,
    4)在主窗口.cpp中自定义函数
    3.子窗口切换到主窗口
    1)在子窗口.h中声明一个按键
    2)在子窗口.cpp中创建一个按键,按键连接this
    3)在子窗口.h中声明一个函数,
    4)在子窗口.cpp中自定义函数
    5)把子窗口的.h 包含进主窗口.h中
    6)在主窗口,h建立一个接收信号的函数和一个对象
    7)在主窗口.cpp中写一个接收子窗口信号的连接(子窗口连接主窗口)
    8)在主窗口.cpp中写一个接收子窗口信号后的函数

    (按F4能切换头文件和cpp文件)

    函数指针

    void fun(int){
    }
    
    void (*p)(int) = fun;
    

    在这里插入图片描述

    如果获得了别人的代码,
    在这里插入图片描述
    需要把.user文件删除,(因为里面保存着路径)再编译运行

    展开全文
  • Qt 之界面换肤

    万次阅读 多人点赞 2016-08-31 13:26:46
    简述 常用的软件基本都有换肤功能,例如:QQ、360、迅雷等。换肤其实很简单,并没有想象中那么难,利用前面分享过的QSS系列文章,我们完全可以实现各种样式的定制! 简述 实现原理 ...首先,新建...

    简述

    常用的软件基本都有换肤功能,例如:QQ、360、迅雷等。换肤其实很简单,并没有想象中那么难,利用前面分享过的QSS系列文章,我们完全可以实现各种样式的定制!

    | 版权声明:一去、二三里,未经博主允许不得转载。

    实现原理

    • 新建多个QSS文件
    • 为各个QSS文件编写对应的样式代码
    • 换肤时,进行全局切换

    效果

    这里写图片描述

    新建QSS文件

    首先,新建两个(按需添加)后缀名为qss的文件,例如:black.qss、white.qss,将它们加入资源文件(qrc)中。

    提示:也可以使用绝对路径或相对路径。

    编写QSS代码

    分别在“black.qss”、“white.qss”文件中编写自己的样式代码,例如:

    black.qss:

    /**********提示**********/
    QToolTip {
            border: 1px solid rgb(45, 45, 45);
            background: white;
            color: black;
    }

    white.qss:

    /**********提示**********/
    QToolTip {
            border: 1px solid rgb(111, 156, 207);
            background: white;
            color: rgb(51, 51, 51);
    }

    QSS代码请参考:Qt之QSS(黑色炫酷)Qt之QSS(白色靓丽),可以直接使用!

    加载QSS

    为了方便以后调用,可以写一个静态加载样式的函数:

    #include <QFile>
    #include <QApplication>
    
    class CommonHelper
    {
    public:
        static void setStyle(const QString &style) {
            QFile qss(style);
            qss.open(QFile::ReadOnly);
            qApp->setStyleSheet(qss.readAll());
            qss.close();
        }
    };

    在需要换肤的时候进行全局切换,例如,切换为黑色皮肤:

    CommonHelper::setStyle("black.qss");

    如果要切换为白色皮肤,只需要将“black.qss”替换为“white.qss”即可。

    这样,我们就完成了一个换肤功能,就这么简单!

    更多参考

    展开全文
  • 在vs-qt环境搭好的前提下,按照下面的步骤操作即可: 1、打开vs2010,文件 --》新建 --》项目,选择Qt5 Projects --》Qt Library 2、在项目名称和位置设置好后,点击确定,然后下一步,到Project Settings界面,带...
  • QT+VS编写和使用动态库

    千次阅读 2018-03-16 16:38:41
    1.用QTcreator新建一个C++库类工程。2.用vs打开pro文件 生成dll和lib,放到调用输出EXE的目录内。3.pro文件中添加LIBS += -lTestdll 之类的。 pro文件增加头文件包含。4.调用处文件添加头文件。即可调用库。...
  • 动态库的创建 动态库的使用 动态库的创建 //SharedLib_global.h #ifndef SHAREDLIB_GLOBAL_H #define SHAREDLIB_GLOBAL_H #include <QtCore/qglobal.h>...# define SHAREDLIB_EXPORT...
  • 新建项目-Qt Library-假如项目名称为dllTest dlltest.h #pragma once #include "dlltest_global.h" class DLLTEST_EXPORT dllTest { public: dllTest(){} ~dllTest(){} } #ifdef __cplusplus extern "C" { #...
  • 由于没有提示,将qt的include路径包含进来. 创建界面类 创建ui类TestWidget对头文件进行修改 编译生成动态库,此时没有任何毛病,问题出在调用ui动态库中 调用动态库 新建调用工程. 结果出现以下错误,原因...
  • qt 5.12.1 下载安装详细教程

    万次阅读 多人点赞 2019-03-07 15:56:38
    前言:Qt是一个跨平台的C++图形界面应用程序框架。它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序。Qt很容易扩展,并且允许真正地组件编程。基本上,Qt同X Window上的Motif...
  • QTQT从零入门教程(二):开始入门

    万次阅读 多人点赞 2018-02-07 13:55:03
    配置   第一个教程简单介绍了图像处理自编软件的基本界面...网上的配置教程数不胜数,在此不赘述,QT配置可以参考VS2017专业版使用最新版Qt5.9.2教程,OpenCV配置用CMake完成。 新建项目   文件——新建——
  • 原创:Qt在Windows下的三种编程环境搭建

    万次阅读 多人点赞 2013-12-16 23:09:13
    尊重作者,支持原创,如需转载,请附上原地址:...从QT官网可以得知其支持的平台、编译器和调试器的信息如图所示: http://qt-project.org/doc/qtcreator-3.0/creator-debugger-engines.html (Home | D...
  • Qt 资料大全

    万次阅读 多人点赞 2016-06-24 14:34:02
    全网最强整理,Qt 官网、编码风格、GitHub & Third-Party、社区论坛、博客、书籍等资源,应有尽有。
  • Qt界面开发(一)(各种控件以及图表)

    万次阅读 多人点赞 2017-12-28 21:51:56
    注:资源主要来源:http://www.qtcn.org/bbs/u/110085... 如若侵权,请联系删除。 本文只是将作品集合到起来,方便大家一起学习。 ... Qt界面开发(各种控件以及图表) 1.Qt简洁窗体 源代码链接:点击打开链接 2....
  • 彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)

    万次阅读 多人点赞 2014-02-15 16:46:22
    一、Qt环境设置 Qt Creator,菜单->工具->选项->文本编辑器->行为->文件编码: 默认编码:System(简体中文windows系统默认指的是GBK编码,即下拉框选项里的GBK/windows-936-2000/CP936/MS936/windows-936) 二、编码知识...
  • Qt Quick 4小时入门

    万人学习 2015-06-08 09:17:30
    Qt Quick(QML)是Qt 5里推荐的UI开发框架,能够为各种设备搭建流畅且绚丽的用户界面。本课程删繁就简,精心选择主题,通过短短的几节课,即可让大家跨越Qt Quick的入门门槛,为进一步学习奠定坚实基础。
  • Qt 4.8.4下载以及傻瓜式安装教程

    千次下载 热门讨论 2012-12-30 13:43:08
    Qt4.8.4已经是Qt4的最后一个版本,本资源是一个安装教程word文档,但是里面有一个压缩包的下载地址,这个压缩包里面有三个东西,Qt4.8.4库包,QtCreator2.5,MinGW编译器。 在网上许多教程都是说得不清不楚的,所以...

空空如也

1 2 3 4 5 ... 20
收藏数 408,336
精华内容 163,334
关键字:

qt