-
Qt界面开发(一)(各种控件以及图表)
2017-12-28 21:51:56注:资源主要来源:http://www.qtcn.org/bbs/u/110085... 如若侵权,请联系删除。 本文只是将作品集合到起来,方便大家一起学习。 ... Qt界面开发(各种控件以及图表) 1.Qt简洁窗体 源代码链接:点击打开链接 2....注:资源主要来源:http://www.qtcn.org/bbs/u/110085 (刘大神)
如若侵权,请联系删除。
本文只是将作品集合到起来,方便大家一起学习。
资源集合已经放到 链接:https://pan.baidu.com/s/1sVvQE8uDujVxeKVVSoxyYw 密码:wslkQt界面开发(各种控件以及图表)
1.Qt简洁窗体
源代码链接:点击打开链接
2.QT漂亮界面
源代码链接:点击打开链接
3.音乐播放器界面
源代码链接:点击打开链接
4.六宫格界面
源代码链接:点击打开链接
5.漂亮通用界面
源代码链接:点击打开链接
6.净化设备管理
源代码链接:点击打开链接
7.树形界面通用图
源代码链接:点击打开链接
8.窗口主框架
源代码链接:点击打开链接
9.tcp文件传输
源代码链接:点击打开链接
10.综合组件的界面
源代码链接:点击打开链接
11.Qt动态圆形进度条
源代码链接:点击打开链接
12.动态绘制曲线
源代码链接:点击打开链接
13.二维码解析
源代码链接:点击打开链接
14.自定义UI演示
源代码链接:点击打开链接
15.Widget例子
源代码链接:点击打开链接
16.俄罗斯方块
源代码链接:点击打开链接
17.Qt360 界面
源代码链接:点击打开链接
18.正则表达式
源代码链接:点击打开链接
19.绘制(平滑与折线)曲线
源代码链接:点击打开链接
20.Tab选项界面
源代码链接:点击打开链接
21.十二宫格界面
源代码链接:点击打开链接
22.网络调试助手
源代码链接:点击打开链接
23.List树形列表界面
源代码链接:点击打开链接
24.Ping界面实现
源代码链接:点击打开链接
25.脉冲维修工具界面
源代码链接:点击打开链接
26.Qt个性时钟
源代码链接:点击打开链接
27.Qt漂亮日历
源代码链接:点击打开链接
28.Qt个性按钮
源代码链接:点击打开链接
29.Led数字显示
源代码链接:点击打开链接
30.多种组件界面
源代码链接:点击打开链接
31.英语词典
源代码链接:点击打开链接
32.绝对牛逼的计算器
源代码链接:点击打开链接
33.Led显示以及list列表
源代码链接:点击打开链接
34.Qt(动态数据模拟)曲线
源代码链接:点击打开链接
35.Tab飘逸界面
源代码链接:点击打开链接
36.滑动显示图片
源代码链接:点击打开链接
37.各种Chart例子
源代码链接:点击打开链接
38.背景图界面
源代码链接:点击打开链接
39.多种样式的进度条
源代码链接:点击打开链接
40.360UI完美界面
源代码链接:点击打开链接
41.360安防系统
源代码链接:点击打开链接
42.机器人聊天
源代码链接:点击打开链接
43.各种chart图表
源代码链接:点击打开链接
44.Qt图片预览(图形列表)
源代码链接:点击打开链接
45.动态显示文本的label
源代码链接:点击打开链接
46.Qt2048游戏
源代码链接:点击打开链接
47.Animation按钮
源代码链接:点击打开链接
48.模拟电量进度条
源代码链接:点击打开链接
49.网易云音乐界面
源代码链接:点击打开链接
50.多种样式日历
源代码链接:点击打开链接
51.myseria串口
源代码链接:点击打开链接
52.绘制魔法鱼儿
源代码链接:点击打开链接
-
《C语言/C++学习指南》Qt界面开发篇视频精讲
2015-06-03 10:50:20主要的演示平台为VS2008 + Qt4.7.3,从简单的例子入手,覆盖Qt界面开发的近乎全部技术点。(自定义Widget、对话框、事件处理Singal & Slot、界面线程与工作线程、数据视图ItemView、拖放操作Drag & Drop、... -
Qt界面程序嵌入另一个Qt界面程序[Linux]
2020-06-12 14:13:21Qt界面程序嵌入另一个Qt界面程序[Linux]Qt的界面程序出现的问题Qt处理问题的传统方法传统方法的缺陷多进程界面开发示例代码结语 Qt的界面程序出现的问题 在Qt界面程序里,主线程是界面线程,并且有且只有主线程才能...Qt界面程序嵌入另一个Qt界面程序[Linux]
Qt的界面程序出现的问题
在Qt界面程序里,主线程是界面线程,并且有且只有主线程才能完成界面的渲染操作,这样就会带来问题。一旦主进程一直处于一个非常耗时的函数中(如构建一个庞大的界面、处理大量的数据),无法处理事件循环中积压的事件以及回调,那么整个界面都会处于未响应状态。
Qt处理问题的传统方法
- 方法1 常规的处理方式,也是Qt官方的处理方式是调用 processEvents() 函数,在长期占用主线程的函数的合适地方不断地调用该函数,这样就可以不断处理各种积压的界面刷新动作、用户操作响应等
- 方法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的话理论上是可行的。
-
S的Qt界面预览和QtCreator的界面预览快捷键
2018-10-16 18:54:22VS的Qt界面预览:Ctrl + R QtCreator的界面预览: Shift + Alt + R 总是忘记,所以在这里记录一下。VS的Qt界面预览:Ctrl + R
QtCreator的界面预览: Shift + Alt + R
总是忘记,所以在这里记录一下。
-
VS的Qt界面预览和QtCreator的界面预览快捷键
2018-08-31 22:55:33VS的Qt界面预览:Ctrl + R QtCreator的界面预览: Shift + Alt + R 总是忘记,所以在这里记录一下。VS的Qt界面预览:Ctrl + R
QtCreator的界面预览: Shift + Alt + R
总是忘记,所以在这里记录一下。
-
QT界面无法显示中文
2020-05-31 18:04:18这里写自定义目录标题QT界面无法显示中文解决方法 QT界面无法显示中文 安装QT后,程序界面无法显示中文,如下图 解决方法 1.点击工具→选项→环境。将下图红色框中的√取消,点击Apply,点击OK。 2.重启软件。 .... -
Qt界面开发(三)
2019-02-14 22:40:54这次要给大家分享一些我在github和qtcn(主要是liudianwu大神,Qt界面开发(一)有很多都是他的作品)上找到的比较漂亮且实用Qt界面和控件集合。 -------------------------------------我是分割线------------------... -
QT界面:控件随界面大小自适应变化
2019-07-16 18:54:52在用QT做一个图像显示界面的过程中需要控件随着QT界面缩放进行自适应变化的问题,特此记录一下。 环境:Win10+VS2015+QT5 1、拖拽控件 首先,新建一个QT GUI工程,在Qt Designer中调整界面大小并拖拽需要的控件,如... -
遍历Qt界面控件
2019-09-25 11:42:46查看了网络上常用的遍历控件代码,很有启发,不过,因为Qt界面类往往有很多层,用网上提到的方法通常只能遍历一层,也就是说,当获取父节点的时候,只能遍历子节点,子节点以下的节点,无法获取到了。 所以,改进后... -
qt界面美化
2015-05-22 11:04:33想问一下大家,现在QT界面编程中怎么把界面做的好看一点?就比如这个界面,这些按钮的效果是用的什么技术 举报违规检举侵权投诉|2012-05-13 21:16wenzhutuzi|分类:Windows| 浏览11813次 分享到: 举报... -
QT界面主题风格设置
2020-04-15 15:14:34本章主要介绍QT界面风格设置。 在main.cpp修改如下代码: #include <QStyleFactory> //新增 int main(int argc, char *argv[]) { QApplication a(argc, argv); //设置界面风格 QApplication::... -
Qt文件编码转换工具(三) Qt界面设计
2019-01-19 20:13:47目录 ...本节为Qt界面设计 下载链接 Realase打包版本下载: Qt文本转化工具 realase版本 https://download.csdn.net/download/qq78442761/10927836 Qt文件编码转换工具源码 ... -
如何将Qt界面嵌入html网页中显示?
2019-10-15 10:01:01Qt开发一个显示图片的功能(或插件),html中显示图片的时候调用Qt的方法展示Qt界面显示图片。 直接用QWebchannel进行调用,会直接弹出一个新的Qt界面,期望是类似与html调用activeX那种界面直接嵌在网页中。 ... -
python调用QT界面使用方法
2020-05-26 15:03:26python使用Qt界面以及逻辑实现 环境准备 安装打包工具: pip install pyinstalle 安装PyQt5 : pip install PyQt5 安装PyQt5工具 : pip install PyQt5-tools 建议使用自定义安装路径: pip install PyQt5-tools... -
QT界面技巧-QComboBox的QSS设置
2018-02-12 16:14:22QT界面技巧-QComboBox的QSS设置 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:12951803 环境: QT版本:5.6.2 操作系统:windows 7 64bit 1.QComboBox设置下拉框item... -
QT界面动态库的跨平台调用
2018-10-17 17:37:45QT界面动态库的跨平台调用关于调用的说明调用过程生成需要被调用的包含QT界面dll生成平台生成过程MFC调用上述dllconsle调用上述dll 关于调用的说明 不要去管网上各种大神说的需要什么什么库,那是瞎折腾!!! 调用... -
QT 界面刷新
2018-04-13 10:45:29QT对界面的调整有很多种形式,如果发现界面样式不正常,通过缩放窗口,或者某项鼠标操作才正常,可能是你的窗口没有正常刷新。可以试试以下方法1. update()函数,实质上是调用了repaint函数,但是不是同步的,就是... -
C++和QT界面+简单工厂模式实现程序
2018-11-30 05:58:34请问有大神也过C++程序(VS),并且和QT界面联系一起。即运行一个程序,能出来QT界面,并在这个界面上实现功能。最重要的是!!!用简单工厂模式来实现这个程序!!!请问大神有写过类似的代码吗? -
qt界面设计的串口通信
2016-04-07 16:28:54初学者求大神指教!!!如何实现通过qt界面设计,按不同的按钮,向串口发送不同的数据,例如,点击1按钮后pc会向串口发送信号1 -
Qt 多界面来回切换的问题以及Qt界面关闭与销毁
2017-12-17 16:15:36Qt 中我们经常会用到好几个界面,那么这几个界面之间来回切换就是一个经常出现的问题。之前我也总是被这个问题困扰,现在写一个样例程序当作一种解决方案,希望能给大家启发。 首先我定义了两个界面,一个主界面,... -
如何实现QT界面的刷新
2015-11-25 02:59:04我想实现一个QT界面的应用,方法是:在menuwindow界面中点击一个按键,然后切换到operwindow界面,该界面实时刷新显示数据。根据我目前查找的资料,点击按键调用槽函数show出新界面,同时按我的理解应该这时也start... -
Qt开发: Qt界面编译后没有及时更新
2017-08-09 17:58:08问题说明: 在qt 界面设计时,发现编译后界面没有及时更新,而且源码下的ui_*.h文件也没有更新,最后发现问题所在 原因: 我更改了编译目录,刚开始的默认编译目录名称太长,所以我改了,没想到会造成这样的问题,... -
QT 界面开发 UI配置及CSS配置
2019-01-14 10:07:48QT 界面开发 UI配置及CSS配置 -
Qt界面源码 -- 各种控件以及图表
2019-04-27 16:27:37Qt界面开发(一)(各种控件以及图表) 资源已经放到 链接:https://pan.baidu.com/s/1sVvQE8uDujVxeKVVSoxyYw 密码:wslk Qt界面开发(各种控件以及图表) 1.Qt简洁窗体 源代码链接:点击打开链接 2.QT漂亮界面 ... -
Qt 界面获取键盘Enter键
2017-12-04 11:43:32在Qt界面如何获取键盘的Enter按键或者数字键盘的Enter按键以下代码亲测有效!void GuiCoordPoint::keyPressEvent(QKeyEvent *event) { switch (event->key()) { case Qt::Key_Return://数字键盘的Enter键 case Qt... -
Qt打开外部exe,并将其嵌入到qt界面中
2018-05-06 07:37:26谢谢啦....Qt打开外部exe已经实现,不过是一个独立的窗口,现在我需要将它嵌入到qt界面中大学的时候玩过VB,也刚好玩过这样的例子,但已经不记得了。下面是我找的一个帖子:https://bbs.csdn.net/topics/370127341... -
qt界面上显示摄像头视频
2014-04-12 09:29:47对于摄像头在qt界面上显示,我采用了一种比较偷懒的方法。利用天嵌资料上的usb_camera的源码,结合自己做的qt界面,将两个进程同时运行,就可以达到摄像头视频在qt界面上显示的效果。而在退出这两个进程的时候,要先... -
QT界面简单的图形移动和鼠标绘图
2017-09-10 22:25:19QT界面图形移动及鼠标绘图 -
Qt界面开发(各种控件以及图表)
2018-08-09 17:23:01Qt界面开发(各种控件以及图表) 1.Qt简洁窗体 源代码链接:点击打开链接 2.QT漂亮界面 源代码链接:点击打开链接 3.音乐播放器界面 源代码链接:点击打开链接 4.六宫格界面 源代码链接:点击...
-
【数据分析-随到随学】Python语法强化与数据处理
-
C#第二十二讲多文档窗口的使用
-
微信支付2021系列之扫码支付一学就会java版
-
21年新消息队列RabbitMQ视频教程AMQP教程
-
三维地图GIS大数据可视化
-
citespacewebofscience下载数据
-
Java基础知识加进阶知识
-
信息系统项目管理师考前必做170题.pdf
-
手势解锁-canvas-javascript实战
-
Spring Boot2.X仿朋友圈PC版系统实战_架构1.0
-
信息系统项目管理师考前必做650题.pdf
-
【数据分析-随到随学】数据分析建模和预测
-
【数据分析-随到随学】Hive详解
-
单元测试UnitTest+Pytest【Selenium3】
-
Dubbo 的核心功能
-
面向对象初步(1)
-
Soul网关源码分析-11期
-
2021-01-24
-
微信支付2021系列之付款码支付一学就会java版
-
add_layer.py