对于编程,没有最好的语言,只有最合适的语言。下面谈谈常见的PC桌面端开发语言。
C/C++系列
C++系列最大的优点就是运行效率高,不过缺点也是很麻烦的,上手难度大。下面介绍介绍两种有官方背书的,开发过程中经常用到的C++界面库,至于Duilib、BCG等第三方开源库这里不再介绍。
1、Qt
C++开发界面首选开源库。在C++领域,有GUI的地方都有Qt,有嵌入式的地方一般也有它,金融、工业、电力、视频监控等行业也有它。集跨平台支持,文档齐全,API设计优雅诸多优点于一身。
它不仅仅是一套界面库,更封装了多线程、访问数据库、图像处理、音频视频处理、网络通信、文件 *** 作等接口。
常见的多玩的YY,金山的WPS,以及网络抓包神器Wireshark等都是使用Qt开发而成,下面附一张使用QSS实现的界面换肤效果图。
Qt
2、MFC
俗话说,MFC==没饭吃,虽然现在2020年都已经过完了,但是还是有大量的公司在使用MFC这一上古技术来开发界面,它并没有灭绝。不过大多数项目处于维护态了。新项目我想很少有公司会采用MFC来开发了。
MFC
如果你是在校学生,不建议深究MFC相关技术,了解其大致思想即可。
如果你已经参加工作,不幸处于维护MFC老项目之中,那么建议工作之余多学习其他技术,早日跳槽脱坑。
C#
简单易上手,想要开发效率,C#绝对是Windows界面开发的王者,背靠微软这一强大后盾,为开发者提供所见即所得的开发模式,即使是新手也可以通过简单的拖拽来开发出带有图形界面的可视化软件,不仅可以开发PC客户端,更能开发Web端。最大的缺点是要安装framework组件。
C#
JS系列
曾梦想一统天下(Web、移动端、PC端)的JS,推出了Electron,为开发者提供PC客户端开发,更有VSCode、Atom、FacebookMessenger这样的成熟案例。不过最大的缺点就是开发出来的东西体积太大了,运行效率偏低。
Electron
Python
没错,就是那个曾经火遍大江南北的Python,它不仅可以写爬虫,更能来开发界面。
借助于PyQT,你也可以快速完成图形化界面开发工作。下图是某大神高仿的网易云音乐的开源项目「FeelUOwn」,使用PyQT开发而成,号称是一个符合Unix哲学的跨平台的音乐播放器。目前该作品已在Github上开源。
FeelUOwn
以上就是我的观点,喜欢就【点个赞】吧!
windows平台下c#是开发桌面应用程序的很好选择
C#语言可以轻松实现桌面程序的开发,利用vs开发工具,拖动控件就可以很快的完成一个软件界面,但然要做到好看,炫酷,还需要借助其他的界面库,或者自己重绘控件。
C#的功能全面,可以轻松调用office组件,windows组件,windowsapi函数,各类数据库连接调用。
C#可以很方便的调用工控设备,如plc,可以轻松 *** 作plc,读取,写入数据等。
c#可以开发windows等其他多平台游戏,使用unity3d,开发机器视觉使用emgu.cvopencv等。
基本上windows平台上的软件都可以制作。
但是c#能做的c++都可以做,不过c++的难度较大,不适合新手。
C#开发Windows系统桌面首选。
跨平台C++很著名的库Qt。
不过现在有了node.js这种脱离浏览器基于chrome的V8引擎的技术,现在可以HTML+CSS+JavaScript开发跨平台的桌面运用,配合前端双向绑定的vue,react,angular等快速开发,高效率,炫丽,框架electron或者nw.js。
打开VS2019创建CMake项目
CmakeList.txt
# requirement of cmake version
cmake_minimum_required(VERSION 3.10)
set(Project_Name OpencvTest)
set(SRC_LIST OpencvTest.cpp)
set(OpenCV_LIB "D:\\lufiles\\opencv310\\build\\x64\\vc14\\lib")
set(Opencv_Include "D:\\lufiles\\opencv310\\build\\include")
# set(OpenCV_LIB "D:\\lufiles\\opencv310\\build\\") # 这两个目录中都包含 OpenCVConfig.cmake 文件,两种设置都可以构建项目
PROJECT(${Project_Name})
include_directories(${Opencv_Include})
link_directories(${OpenCV_LIB})
add_executable(${Project_Name} ${SRC_LIST})
target_link_libraries(${Project_Name} opencv_world310d.lib)
OpencvTest.cpp
#include <opencv2/core.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
#include <stdio.h>
using namespace cv
using namespace std
int main(int, char**)
{
Mat frame
//--- INITIALIZE VIDEOCAPTURE
VideoCapture cap
// open the default camera using default API
// cap.open(0)
// OR advance usage: select any API backend
int deviceID = 0 // 0 = open default camera
int apiID = cv::CAP_ANY // 0 = autodetect default API
// open selected camera using selected API
cap.open(deviceID + apiID)
// check if we succeeded
if (!cap.isOpened()) {
cerr <<"ERROR! Unable to open camera\n"
return -1
}
//--- GRAB AND WRITE LOOP
cout <<"Start grabbing" <<endl
<<"Press any key to terminate" <<endl
for ()
{
// wait for a new frame from camera and store it into 'frame'
cap.read(frame)
// check if we succeeded
if (frame.empty()) {
cerr <<"ERROR! blank frame grabbed\n"
break
}
// show live and wait for a key with timeout long enough to show images
imshow("Live", frame)
if (waitKey(5) >= 0)
break
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)