精华内容
下载资源
问答
  • qt界面
    千次阅读
    2021-06-10 21:20:57

    一、Qt简介

    1、什么是Qt:
    ​ 是使用C++语言封装的一套用于图形界面编程的框架,Qt专注但不局限于图形界面的开发,还支持系统调用、网络编程、数据库编程、2D/3D图形处理、音视频处理等。
    ​ 它是跨平台了,支持几乎所有的主流操作系统,Linux、Windwos、MacOS、Android、iOS等系统。

    2、为什么选择Qt

    ​ 基于C++,简单易用

    ​ 优良的跨平台特性,在个人计算机、工控、嵌入式 的界面占主导地位

    二、Qt环境与工具

    ​ 1、头文件和库文件
    ​ 将Qt安装完成后,头文件的库文件会自动拷贝到以下路径中,方便为Qt应用程序提供运行支持。
    ​ 头文件路径:/usr/include/qt4/

    ​ 库文件路径:/usr/lib/i386-Linux-gnu/qt4/

    ​ 静态库需要下载Qt源码进行手动编译

    ​ 2、创造器,它是Qt官方提供一集成开环境,是集代码编辑、项目构建、编译、调试、版本管理于一体的。
    ​ 3、设计器,以画图方式设计图形界面,所见即所得,但只是出现样子没有实际功能。
    ​ 4、界面编译器,负责把设计器画出的文件编译成C++代码。
    ​ 5、助手,qt的帮助手册,有各种的类说明,示例,还提供强大的查询功能。assistant命令打开

    三、第一个Qt程序

    ​ 1、编辑代码,完成后保存退出
    ​ QApplication 负责管理应用的资源,同行接收命令行参数。
    ​ exec() 是应用程序的控制权交给Qt,使程序进入事件循环,等待用户的动作,如,鼠标单击,按下键盘等操作。
    ​ QLabel 标签控件负责显示一些内容
    ​ show() 控制默认情况下是隐藏,show成员函数负责把控件显到前台
    ​ resize() 设置控件的界面大小。
    ​ 2、构建项目,并生成项目文件
    ​ qmake -project -> xxx.pro文件
    ​ 3、生成编译脚本
    ​ qmake -> Makefile
    ​ 4、编译并运行
    ​ make
    ​ ./xxx

    #include <QApplication>
    #include <QLabel>
    
    int main(int argc,char* argv[])
    {
    	QApplication app(argc,argv);
    	QLabel lab("Hello Qt!");
    	lab.show();
    	lab.resize(800,600);
    	return app.exec();
    }
    

    四、Qt创造器

    ​ 1、启动创造器:qtcreator
    ​ 2、创建项目:Qt控件项目->Qt GUI应用->项目路径->项目名称->选择界面类。
    ​ 注意:路径和项目名称尽量不要有中文。
    ​ 3、设计界面、编写代码、添加功能。
    ​ 4、构建项目并运行。

    常用的快捷键:

        Alt+0 显示隐藏侧边栏
        Ctrl+/ 注释、取消注释
        Ctrl+I 自动调整代码格式
        Ctrl+Shift+R 批量修改变量名
        Ctrl+F 搜索、替换
        Ctrl+单击 跳转到定义位置
        Shift+F2 声明与定义之间切换
        Alt+Shift+u 转换成大写
        Alt+u 转换成小写
        F4 源文件与头文件之间切换
        F1 打开帮助手册
        Ctrl+B 编译运行
        Ctrl+B+S 保存所有文件再编译运行
        Ctrl+R 运行
        Ctrl+e松开后按0 关闭所有分割窗口
        Ctrl+e松开后按1 关闭当前分割窗口
        Ctrl+e松开后按2 水平分割窗口
        Ctrl+e松开后按3 垂直分割窗口
    

    五、帮助手册

    ​ inherits:该类继承了哪些类

    ​ 1、Public Types: 访问权限是public的成员变量
    ​ 2、Properties:访问权限是private的成员变量,这种成员一般都有get/set函数
    ​ 3、Public Functions:访问权限是public的成员函数
    ​ 4、Static Public Members:访问权限是public的静态成员
    ​ 5、Public Slots:访问权限是public的槽函数
    ​ 6、Signals:信号,注意:它不是函数,可以通过 emit 发送,与槽函数建立联系。
    ​ 7、Reimplemented Protected Functions:一些虚函数,可以覆盖它们形成多太,可以被上层的代码自动调用,一般用它们实现对事件的处理。
    ​ 8、Detailed Description:对本类的详细说明、使用方法、调用时的上下文注意事项等。

    公有成员函数:

        pos()   获取控件的位置
        x()     获取控件的横向位置
        y()     获取控件的竖向位置
        move()  设置控件的位置
    
        size()    获取控件的大小
        resize()  设置控件的大小
        height()  获取控件的高度
        width()   获取控件的宽度
        
        setText() 设置控件显示文字
        text()    获取控件的文字
        
        show()    显示控件
        hide()    隐藏控件
        setStyleSheet() 设置控制的css样式
    

    六、中文处理

    ​ 在Qt 4.8 默认使用的是utf-16的字符编码,windows系统默认的字符编码是GB系列,而Linux、MacOS默认使用的是utf-8的字符编码,如果直接使用中文在程序中就会出现乱码。

    QTextCodec * QTextCodec::codecForName (const char * name) static
    功能:创建字符编码类对象
    name: "utf-8"
    
    void QTextCodec::setCodecForLocale ( QTextCodec * c ) static
    功能:设置本地系统使用的字符编码集
    
    void QTextCodec::setCodecForCStrings ( QTextCodec * codec ) static
    功能:设置程序中使用的QString的字符编码集
    
    void QTextCodec::setCodecForTr ( QTextCodec * c ) static
    功能:设置程序外部的字符编码集
    
    固定的使用方法:
    #include <QTextCodec>
    
    QTextCodec* code = QTextCodec::codecForName("utf-8");
    QTextCodec::setCodecForTr(code);
    QTextCodec::setCodecForLocale(code);
    QTextCodec::setCodecForCStrings(code);
    

    七、Qt中的字符串与输出

    ​ QString 具备string的所有功能
    ​ 字符串字面值可以直接转换成QString类型,从界面输入的数据也都是QString类型的
    ​ QString可以通过to系列函数转换成各种类型

    C/C++语言中的scanf/printf/cin/cout可以继续使用,但Qt建议使用qDebug,因为它具备cin/cout/scanf/pritnf的功能。
    

    八、信号和槽

    ​ 1、信号
    ​ Qt中的信号是模仿系统信息,对象与对象之间通信的一种方式。
    ​ Qt中的控件对象一旦发生什么变化就会发出信号通知其它对象。

    2、槽函数
    可以与信号绑定一种类成员函数,也可以当作普通的成员函数调用。

    3、信号与槽函数的连接

    bool QObject::connect(
        const QObject *asender, 信号发者对象地址
        const char *asignal, 发出的信号
            需要使用SIGNAL()宏把信号转换成字符
        const char *amember, 信号接收者对象地址
        const char *method 对象接收的槽函数
            需要使用SLOT()宏把槽函数转换成字符串
    ) const
    connect(&sender,SIGNAL(clicked(void)),&recv,SLOT(close(void)));
    注意:在写信号和槽函数时不需要手动编写,而尽量选择创造器的提示,原因是信号和槽一旦格式出错编译器无法发现。
    

    九、窗口容器

    ​ 从Hello案例中可以看出,一个控件就是一个窗口,要想把多个控件放在一个窗口中,需要需要把这些控件束缚一个容器中,这种控件就叫窗口容器。
    ​ 1、QMainWindow
    ​ 主窗口容器,由标题栏、菜单栏、工具栏、状态栏以及中央显示区域组成。

    2、QDialog
    对话框容器,管理多个不同的交互控件。
    
    3、QWidget
    纯粹的容器,它是QMainWindow和QDialog的父类。
    
    在创建控件时,把容器的地址作为参数给控件,这样控件就被放入容器中了。
    
    4、界面设计的工作原理
        1、项目创建完成后会生成一个mainwindow.ui界面文件,双击该文件可以编辑界面。
        2、mainwindow.ui会自动生成一份ui_mainwindow.h头文件,该文件在创造器中看不到。
        3、在ui_mainwindow.h头文件中会自动生成Ui_MainWindow类,该类中会包含所有编辑的控件对象。
        4、在ui_mainwindow.h头文件中还会自动创建MainWindow类,并继承Ui_MainWindow类且被包含Ui名字空间中。
        5、mainwindow.h头文件中也会自动创建MainWindow类,该类中会有一个Ui::MainWindow* ui类型的成员,该对象会构造函数的初始化列表中被new创建。
        6、构造函数函数调用了ui->setupUi(this)成员函数,设置窗口容器以及控件的样式,通过ui可以访问所有界面文件中的控件。
    

    十、设计师的使用

    ​ 1、设置窗口容器的界面大小
    ​ 2、拖拽一些需要的控件
    ​ 1、在对象查看器中设置控件的名字
    ​ 2、设置控件的大小位置
    ​ 3、使用方向键,Ctrl+方向键对控件位置进行微调
    ​ 4、使用Shift+方向键,Shift+Ctrl+方向键对控件的大小进行微调
    ​ 3、设置控件的字体、字号、特效。
    ​ 4、设置控件的水平对齐、垂直对齐
    ​ 5、设置控件是否启用
    ​ 6、使用uic命令可以把.ui文件生成头文件。

    QMainWindow w;
    Ui::MainWindow windows;
    windows.setupUi(&w);
    w.show();
    

    作业:实现QQ登录界面

    更多相关内容
  • QT界面旋转切换Widget

    2018-06-06 14:36:49
    QT界面的旋转切换样例,可以实现旋转效果,在切换不同显示内容时效果较好。
  • QT界面做成dll在qt其他程序中调用,
  • qt界面的美化,包含源码和ui界面,漂亮大气,上档次,欢迎下载
  • 卤煮仿照Word写的滑动导航条和伸缩菜单。大家有需要可以多多参考!
  • 最简单易用的Qt 界面库插件 FTStyle for Qt5 (Windows),向您展示使用 FTStyle 后软件界面的完美效果
  • QT界面介绍,有利于初学者学习QT界面,是非常好的入门资料
  • qt界面跳转切换

    热门讨论 2014-06-23 17:05:50
    一个简单的利用信号-槽实现的界面跳转切换示例
  • qt界面设计

    千次阅读 2021-10-08 15:01:15
    设计界面时大概可以分三步: 构造出需要的所有控件 通过布局管理器确定控件位置 通过样式表优化控件样式 1.布局管理器 1. QBoxLayout QHBoxLayout 水平布局 QVBoxLayout 垂直布局 1)setStretch 设置部件的拉伸...

    设计界面时大概可以分三步:

    1. 构造出需要的所有控件
    2. 通过布局管理器确定控件位置
    3. 通过样式表优化控件样式

    1.布局管理器
    在这里插入图片描述

    1. QBoxLayout
                    QHBoxLayout    水平布局
                    QVBoxLayout    垂直布局
                        1)setStretch  设置部件的拉伸系数
                        2)setSpacing  设置部件之间的距离
                        3)setStretchFactor  设置布局管理器之间的拉伸系数
                        4)addSpacing  添加固定空间到长方体布局末尾
                        5)addStretch  添加可拉伸空间到长方体布局末尾
                        6)setMargin  设置布局管理器与边界的距离
                        
     2. QGridLayout    栅格布局:将空间划分成若干个行和列,并将子控件放置到划好的小空间中;
                    1)setRowStretch  设置行比例系数
                    2)setColumnStretch  设置列比例系数
                    3)setSpacing  设置部件之间的距离
                    4)addWidget重载版本可设置控件所占行数和列数
                    
     3. QFormLayout    表格布局:将布局空间分为两列,左边一般放标签,右边放edit之类的部件;
                    1)setLabelAlignment  设置标签对其方式
                    2)addRow  添加表单项
                    3)setRowWrapPolicy   设置标签和文本框的排列方式
                    
     4. QStackedLayout 栈式布局:将一系列部件排列成堆叠的形式,每次只有顶部的部件可见;
    

    2.样式表

    样式表有三种构建方式:

    1. 在qt designer中设置
    2. 直接使用setstylesheet函数在工程中设置
    3. 将样式表写在.qss文件中再加载到工程中设置
      QFile qssFile(":/styleSheet.qss");
      if(qssFile.open(QFile::ReadOnly))
      {
          QString qss = qssFile.readAll();
          //qDebug()<<qss;
          this->setStyleSheet(qss);
          qssFile.close();
      }
      

    使用qt帮助文档搜索qt style sheets可以查看样式表文档:

    1.The Style Sheet Syntax:介绍Qt样式表怎么使用(语法)
    2.Qt Designer Integration:介绍了如何在设计器中使用Qt样式表
    3.CustomizingQt Widgets Using Style Sheets:介绍了部件样式盒模型
    4.Qt Style Sheets Reference:样式表属性列表,包括可以使用样式表的空间、
      属性、属性对应的值、子控件、伪状态
    5.Qt Style Sheets Examples:列出了常用部件使用样式表的例子
    
    以下就是对qt帮助文档的总结:
    
    1. 样式表基本语法为: 选择器::子控件:伪状态 {属性:值}      
        其中子控件和伪状态不是必须的,例如:
     			   QPushButton{color:red};
     
        多个选择器可以指定相同的声明,只需要使用逗号隔开,例如:
                   QPushButton,QLineEdit,QComboBox{color:red}
    
        声明部分是一些属性:值对组成的列表,它们包含在大括号中,使用分号隔开。例如:
                   QPushButton{color:red;background-color:white}
                   
    2. 几种常用选择器
    	1. 通用选择器*:匹配所有的控件,比如: *{color:red}
    	2. 类型选择器: 匹配此类及其子类的实例,比如:QPushButton{color:red}
    	3. 类选择器:匹配此类实例但不匹配其子类实例,比如:.QPushButton{color:red}
    	4. ID选择器:匹配具有特定名字的此类实例,需要提前使用setObjectName函数起名字,例如:QPushButton#okButton{color:red}
    	
    3. 子控件
    	对一些复杂的部件修改样式,可能需要访问它们的子控件,例如QComboBox的下拉按钮,
        还有QSpinBox的向上和向下的箭头等。选择符可以包含子控件来对部件的特定子控件应用规则,例如:
            QComboBox::drop-down{image:url(dropdown.png)}
    这样的规则可以改变所有的QComboBox部件的下拉按钮的样式。
    
    在Qt Style Sheets Reference关键字对应的帮助文档的List of Stylable Widgets一项中列出了所有
    可以使用样式表来自定义样式的Qt部件,在List of Sub-Controls一项中列出了所有可用的子控件。
    
    4. 伪状态
    	伪状态出现在选择符之后,用冒号隔离,例如:
    				QPushButton:hover{color:white}
    	这个规则表明当鼠标悬停在一个QPushButton部件上时才被应用。
    
    	伪状态可以使用感叹号来表示否定,例如要当鼠标没有悬停在一个QRadioButton上时才应用规则,
    那么这个规则可以写为:
           		    QRadioButton:!hover{color:red}
           		    
    	伪状态还可以多个连用,达到逻辑与效果,例如当鼠标悬停在一个被选中的QCheckBox部件上时才应用规则,那么这个规则可以写为:
                    QCheckBox:hover:checked{color:white}
                    
    	在Qt Style Sheets Reference关键字对应的帮助文档的List of Pseudo-States一项中列出了Qt支持的所有的伪状态。
    
    5. 解决冲突
    	当多个样式规则用不同的值指定相同的属性时,就会出现冲突。比如以下样式表:
    				QPushButton#okButton { color: gray }  				
    				QPushButton { color: red }
    	当遇到此类情况时,越具体的才会被应用,所以上面样式表指定名为oKButton的按钮字体为灰色
    

    3.属性列表

    1 background 背景    包括:颜色、图片、对其方式
    2 border  边框      包括:颜色、图片、边角半径、风格、宽度
    3 color 显示的文本的颜色
    4 font 文本字体      包括:字体家族(新罗马等)、大小、风格
    5 text-align        文本和图标在小部件内容中的对齐方式。
    6 text-decoration        附加的文本效果(上划、下划线、删除线)
    5 gridline-color   QTableView网格线的颜色
    6 height 子控件高度    也可设置最大最小高度
    7 width 子控件宽度      也可设置最大最小宽度
    8 icon-size   部件中图标的宽度和高度
    9 margin    框上下左右边缘的长度
    10 opacity    部件透明度  0~255->透明~不透明
    11 padding    部件填充  上下左右
    12 image     在子控件的内容矩形中绘制的图像(比如QLineEdit的内容矩形)
    13 image-position    在子控件的内容矩形中绘制的图像的对其位置
    
    阿里巴巴矢量图标库  https://www.iconfont.cn/
    
    展开全文
  • QT界面美化与添加多个界面

    千次阅读 2022-05-28 15:37:31
    一、在QT界面中添加图片 首先在工程中添加源文件 右键选择class1 选择Add new 如下图: 添加完成之后会出现源文件夹目录 然后右键选择.qrc文件,然后选择Open in Edit 5.再点击鼠标位置,创建目录,只留下“/”...

    一、在QT界面中添加图片

    首先在工程中添加源文件

    1. 右键选择class1
    2. 选择Add new
      如下图:
      在这里插入图片描述
    3. 添加完成之后会出现源文件夹目录
    4. 然后右键选择.qrc文件,然后选择Open in Edit
      在这里插入图片描述
      5.再点击鼠标位置,创建目录,只留下“/”表示根目录
      在这里插入图片描述
    5. 然后点击添加文件,选择提前存好的图片,最好把图片提前放在工程文件夹
      在这里插入图片描述

    二、界面布局->屏幕自适应

    做出的软件界面,要适应窗口的大小,要随着串口的变化而变化。
    当窗口缩小时,界面跟随着缩小,放大时,界面要适当放大。

    自适应主要用到的控件就是:Spacers里面的两个弹簧

    如下图:
    在这里插入图片描述
    对界面的布局还会用到几个主要的布局工具

    1. 水平布局
    2. 垂直布局
    3. 栅格化布局
    4. 打破布局
      在这里插入图片描述

    主要把显示界面布局规划好,

    最后进行上、下、左、右、四个边界放置弹簧

    选择整个窗口,点击栅格化布局

    在这里插入图片描述

    三、界面切换

    1. 添加新的UI界面
    2. 右键点击UI文件夹-》Add new
      在这里插入图片描述
    3. 然后选择 设计师界面
      在这里插入图片描述
    4. 选择页面模板Widget
      在这里插入图片描述
      5.下面更改好文件名就可以了,创建好之后文件会自动添加到目录

    创建完成界面之后,可以在别的地方去调用,一个UI界面实际上就是一个类

    1. 在一个源文件中,添加头文件(刚才保存到文件名.h)
    2. 创建一个类
    3. 然后就可以进行切换了
      实现代码如下:
    #include "show01.h"
    #include <string.h>
     QString userName = ui->userEdit->text();
        QString password = ui->passwordEdit->text();
        if(userName == "123456789" && password == "1234")
        {
            show01 *sho = new show01;//ui界面的类
            sho->setGeometry(this->geometry());
            this->close();//关闭当前界面
            sho->show();//打开新的界面
        }
        else//账号或密码错误提示
        {
            ui->tiShik->setStyleSheet("color:red;");//设置Label中文字颜色
            ui->tiShik->setText("账号或密码错误,请检查后重试!");
        }
    
    展开全文
  • Qt界面程序嵌入另一个Qt界面程序[Linux]Qt的界面程序出现的问题Qt处理问题的传统方法传统方法的缺陷多进程界面开发示例代码结语 Qt的界面程序出现的问题 在Qt界面程序里,主线程是界面线程,并且有且只有主线程才能...

    Qt的界面程序出现的问题

    在Qt界面程序里,主线程是界面线程,并且有且只有主线程才能完成界面的渲染操作,这样就会带来问题。一旦主进程一直处于一个非常耗时的函数中(如构建一个庞大的界面、处理大量的数据),无法处理事件循环中积压的事件以及回调,那么整个界面都会处于未响应状态。

    Qt处理问题的传统方法

    1. 方法1 常规的处理方式,也是Qt官方的处理方式是调用 processEvents() 函数,在长期占用主线程的函数的合适地方不断地调用该函数,这样就可以不断处理各种积压的界面刷新动作、用户操作响应等
    2. 方法2 另一种处理方式,可以将数据的处理放置于另一个线程中处理,这样就可以解放主线程,让主线程专心应对于界面相关的工作。

    传统方法的缺陷

    有一种情况,上述两种方式都无法处理。比如说,程序在收到某个消息时创建一个新的界面,而创建这个界面非常耗时,在这种情况下,首先方法2是无法使用的,因为这是界面控件的创建必须在主线程。

    然后是方法1,方法1存在风险,设想这样一个情况,程序收到消息 M_A 将数据 dataA 存储在对象 * structA* 上,然后界面 WidgetA 根据 dataA 来创建控件,在创建 widgetA 的中途中调用 processEvents() ,这时又收到一次消息 M_B ,那么调用processEvents()就会处理该消息的对应的函数,那么就会把 dataB 存在对象 structA 上,就会将原本的 dataA 数据给覆盖,那么一旦 processEvents() 结束,回到WidgetA的创建函数,但此时的数据已经不是原来的数据了,这样就会带来未知的后果。所以说,需要确保事件队列的所有动作不影响本函数(调用 processEvents() 的函数),才能调用 processEvents() 函数。

    那么至少,我们在加载又大又多的界面时,需要给用户一个等待条的提示,这样才能避免界面未响应的不良效果。那等待条在加载界面时是无法刷新的,界面的刷新需要不断处理事件队列里关于绘制的事件,处理事件队列需要调用 processEvents() 函数,但是该函数是一股脑的把所有积压的事件处理了(当然Qt的 processEvents() 可以过滤用户动作产生的事件),只要其中有一个事件对正在进行创建的界面产生了影响,那么就会出现问题,那么这种情况下有什么解决方案呢?当然有,多进程界面开发。

    多进程界面开发

    参考blog:
    https://www.cnblogs.com/swarmbees/p/11100513.html
    https://blog.csdn.net/u013394556/article/details/78534833
    https://blog.csdn.net/r5014/article/details/79286444

    既然主线程的随心的调用processEvents(),而我们又需要刷新等待界面,而刷新界面必须主线程,既然如此,那就再创建一个主线程不就好了么!但是一个进程只有一个主线程啊,所以说我们需要再创建一个界面进程,然后把这个子界面进程嵌入到主界面进程当中,在主界面进程忙于工作时,子界面进程仍可以不断刷新窗口,这样就可以避免给用户界面未响应的体验。

    关键函数:
    QWindow::fromWinId(winId),可以通过句柄返回一个window对象
    QWidget::createWindowContainer(), 可以为QWindow创建一份widget对象

    示例代码

    子窗口进程:
    main.cpp

    #include <QApplication>
    #include <QDebug>
    #include <stdio.h>
    #include <QLabel>
    #include <QMovie>
    #include <QWindow>
    
    int main(int argc, char *argv[])
    {
        if(argc == 2)
        {
            QApplication a(argc, argv);
    		
    		//这里是子窗口的顶层窗口
            QLabel w;
            QMovie movie(&w);
            movie.setFileName("XXX.gif");
            w.setMovie(&movie);
            movie.start();
            //end
    
            WId wid = WId(QString(argv[1]).toInt());//通过参数列表获取父进程窗口的WinId
            QWindow *window = QWindow::fromWinId(wid);//获取父进程窗口
    
            w.setProperty("_q_embedded_native_parent_handle", QVariant(wid));//设置属性,这句是必须的
    
            w.winId();//必须调用一次,生成winId
            w.windowHandle()->setParent(window);//设置父窗口
            w.show();//最后调用show,提前调用qt会为其生成窗口控件,这样就会和你原本想要嵌入进的父进程界面产生冲突
    
            fprintf(stderr, "%lld", w.winId());//写入标准错误输出,stderr能立即输出,stdout则不行
    
            return a.exec();
        }
    
        return 0;
    }
    

    主窗口进程
    waitingbarwin.h

    #ifndef WAITINGBARWIN_H
    #define WAITINGBARWIN_H
    
    #include <QWidget>
    
    namespace Ui {
    class WaitingBarWin;
    }
    
    class QProcess;
    
    class WaitingBarWin : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit WaitingBarWin(QWidget *parent = 0);
        ~WaitingBarWin();
    
    private:
        Ui::WaitingBarWin *ui;
        QProcess *m_process;
    
    private slots:
        void slot_createWaitingBar();
    };
    
    #endif // WAITINGBARWIN_H
    
    

    waitingbarwin.cpp

    #include "waitingbarwin.h"
    #include "ui_waitingbarwin.h"
    
    #include <QProcess>
    #include <QDebug>
    #include <QWindow>
    #include <QPixmap>
    #include <QBitmap>
    
    WaitingBarWin::WaitingBarWin(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::WaitingBarWin),
        m_process(nullptr)
    {
        ui->setupUi(this);
    
        QPixmap pixmap;
        pixmap.load("XXX.gif");
    
        setFixedSize(pixmap.size());
        setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
        setMask(pixmap.mask());
    
        if(m_process == nullptr)
        {
            QString cmd = "WaitingBar";//子程序执行文件地址
            QStringList argList;
            argList << QString::number(this->winId());//把父窗口的id给子进程传递过去
            m_process = new QProcess(this);//使用进程运行子进程窗口
            connect(m_process, &QProcess::readyReadStandardError, this, &WaitingBarWin::slot_createWaitingBar);//等待子进程窗口把自身的winId传递过来
            m_process->start(cmd, argList);
        }
    }
    
    WaitingBarWin::~WaitingBarWin()
    {
        delete ui;
        m_process->terminate();//在父窗口关闭时,主动终止子窗口进程
        m_process->waitForFinished(50);
    }
    
    void WaitingBarWin::slot_createWaitingBar()
    {
        quint64 winId = m_process->readAllStandardError().toLongLong();
        QWindow *childWin = QWindow::fromWinId(winId);
        if(childWin)
        {
            QWidget *widget = QWidget::createWindowContainer(childWin);//获取一个子进程窗口的widget
            ui->verticalLayout->addWidget(widget);//这里是可以使用布局器管理子进程窗口的,不管理的话就在坐标0,0处
        }
    }
    
    

    main.cpp

    #include "waitingbarwin.h"
    #include <QApplication>
    #include <QMainWindow>
    #include <QPushButton>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        QPushButton win;
        win.show();
    
        WaitingBarWin w(&win);
    
    	//测试,主进程陷入长时间工作时,子进程窗口仍然正常刷新
        QObject::connect(&win, &QPushButton::clicked, [&w](){
            w.show();
            while (1) {
            }
        });
    
        return a.exec();
    }
    

    结语

    关于windows平台的使用我没有测试,网上也大多是windows平台的,感觉是获取winId的方式可以使用windows系统的函数实现,这样就可以去嵌入更多的应用。linux平台的获取WinId的方法我暂时没有实现,只是通过Qt自带的方式获取本进进程界面的WinId,如果想要嵌入其他程序,能找到WinId的话理论上是可行的。

    展开全文
  • QT界面添加背景图片

    千次阅读 2022-03-23 16:39:47
    通过QPixmap给登录界面添加背景,让界面看起来更加好看,简单分享一下。。。 记得添加头文件:QBitmap 源码 #include "mainwindow.h" #include "ui_mainwindow.h" #include<QBitmap> MainWindow::MainWindow...
  • 而习惯了使用VS编程,又想使用QT进行界面开发,那就很有必要看一下这篇文章。 关于QT与VS如何联动,请看我的另一篇文章:VS+QT开发环境搭建 创建项目 先上项目列表: ui_QtWidgetsApplication1.h:包含了UI界面内的...
  • 1、创建一个QT工程 new project —> Application —> Qt Widgets Application —> choose…(注意不要有中文路径)填写名称(我写的名称为class2)和创建路径(D:\qt\qt_demo\class2) —> 填写类名,...
  • VS2017创建Qt界面程序

    千次阅读 2021-10-27 16:15:53
    利用VS创建Qt的ui控制程序,首先要选对模板,Console就是会出现类似如下图的黑框,将结果显示出来,很简约的指令反馈系统,用来作为简单的指令反馈还行,但是我们要做好看的界面就看看其他的吧; ConsoleApplication:...
  • Qt界面刷新问题

    千次阅读 2021-02-28 21:18:26
    关于QT界面刷新 在软件开发过程中遇到界面刷新异常,通过缩放窗口,或者某项鼠标操作才正常。 1.在窗口中showEvent()事件函数中实现刷新界面 // 让界面可以及时更新 void CMainStaticsWindows::showEvent...
  • (四) 制作一个最简单的qt界面

    千次阅读 2021-03-31 15:27:08
    2.做一个简单的QT界面 如何创建一个QT工程 1.直接点击新建项目里面的application 2. 3.不能有中文名字 4.选择qwidget 5…pro文件里有哪些东西呢 6.Forms中的.ui文件 7.找到label 8.调整字体大小 9.居中对齐 ...
  • qt界面旋转~笔记

    千次阅读 2020-08-14 14:30:41
    Qt程序界面旋转,通常有两种方式: 方式一: qt需要支持旋转,在编译嵌入式qt库(如qte生成的Lib)的时候要加上-qt-gfx-transformed,-qt-gfx-linuxfb选项; 启动Qt程序时加上参数 ./qtdemo-qws-display ...
  • qt界面间传递参数(两种方法)

    千次阅读 2022-03-07 15:58:29
    } 总结 例如:以上就是今天要讲的内容,本文仅仅简单介绍了qt界面之间传参的技巧,而qt creator提供了大量能使我们快速便捷地处理数据的函数和方法,其他内容请移步博主其他文章或留言并关注博主等待后续发布。
  • QT5】解决 QT 界面中文显示乱码问题

    千次阅读 多人点赞 2021-08-16 13:29:12
    QT中存在比较麻烦的中文乱码问题,解决方法如下: QT4解决方法: QTextCodec *codec = QTextCodec::codecForName("gbk"); QTextCodec::setCodecForLocale(codec); QTextCodec::setCodecForCStrings(codec); ...
  • 使用Go语言开发Qt界面

    千次阅读 2021-10-13 10:43:41
    Go 语言本身是没有 UI 库的,不过有许多第三方的库支持将 Go 语言绑定到其他 UI 库,比如 Qt、GTK。参考地址 环境搭建 非 windows 或者需要参数说明的可以参考官方的wiki、windows 安装 Qt 安装 下载你需要的版本,...
  • Qt界面制作简单教程,调用python代码

    千次阅读 2022-03-23 15:09:56
    Qt对C++编译者更有友好些,平时python用的比较多,所以收集学习了一下用python来做界面的方法,并做了个简单的小教程。
  • C#的WinForm中嵌入Qt界面

    千次阅读 热门讨论 2020-06-20 07:58:46
    C#的WinForm中嵌入Qt界面库 为何会有如此奇葩需求 一处代码,多处运行 C#有两种写界面的框架,winFrom和WPF,这二者写的界面可以相互调用,但C#编写的界面组件在非托管C++虽然理论上可以,但是这种类似反射的...
  • qss美化Qt界面

    千次阅读 2020-03-05 18:07:33
    Qt提供了类似前端css的样式表qss(Qt样式表)来进行界面优化,可以实现代码界面分离,像MFC这种需要进行控件重载才能实现。qss的使用方法如下: (1)在Qt设计器中对控件右键----改变样式表,可以填写qss语法来...
  • Qt界面美化

    热门讨论 2013-09-15 23:34:25
    Qt界面美工实例.zip,Qt界面美工实例.doc
  • python调用QT界面使用方法

    千次阅读 2020-05-26 15:03:26
    python使用Qt界面以及逻辑实现 环境准备 安装打包工具: pip install pyinstalle 安装PyQt5 : pip install PyQt5 安装PyQt5工具 : pip install PyQt5-tools 建议使用自定义安装路径: pip install PyQt5-tools...
  • 在下面的内容我讲继续讲解如何导出/导入带QT界面且依赖opnecv库的DLL。 程序功能效果展示 userDLL这个项目通过调用jbyDLL.dll第三方库 实现opencv显示图片 和 显示QT界面 导出带QT界面且依赖opencv第三方库的DLL 和...
  • QT 界面强制刷新

    千次阅读 2019-10-25 13:22:50
    针对qt界面刷新显示 在qwidget中可以使用 show(); exec(); setup(); repaint(); paintEvent(); 等都可以实现界面刷新和重新绘制 但是如果需要在控件外进行刷新就需要下面方法: #include <QGuiApplication>...
  • Qt界面开发(一)(各种控件以及图表)

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

    千次阅读 2020-07-06 22:29:13
    【背景】一个类似Windows任务管理器的性能界面。该界面有多个曲线图同时定时刷新,每个曲线图包括多条曲线更新,数据更新频率大概为一秒一次。程序中曲线图已封装为自定义的图表类,给出数据更新接口。 【初始方案...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 122,413
精华内容 48,965
关键字:

qt界面