本控件很早就做好了,由于当时的QPainter功力不足,还不是很熟悉QPainter,采用的是效率比较低的直接用现有控件堆积而成,比如指示器采用的QLabel,用样式表来控制对应的形状,指示器所在的底部放一个widget,采用左右布局,然后右侧放一个d簧把指示器label全部顶在左边,至于图片的显示,采用的是样式表中的border-image来设置,开个定时器,到了时间则设置成不同的border-image即可。这种方法虽然效率低了点,但是初学者很容易理解接收,甚至可以做出更多的效果,只要项目对CPU要求不高,也不失为一种还行的办法。超过146个精美控件,涵盖了各种仪表盘、进度条、进度球、指南针、曲线图、标尺、温度计、导航条、导航栏,flatui、高亮按钮、滑动选择器、农历等。远超qwt集成的控件数量。
每个类都可以独立成一个单独的控件,零耦合,每个控件一个头文件和一个实现文件,不依赖其他文件,方便单个控件以源码形式集成到项目中,较少代码量。qwt的控件类环环相扣,高度耦合,想要使用其中一个控件,必须包含所有的代码。全部纯Qt编写,QWidget+QPainter绘制,支持Qt4.6到Qt5.12的任何Qt版本,支持mingw、msvc、gcc等编译器,不乱码,可直接集成到Qt Creator中,和自带的控件一样使用,大部分效果只要设置几个属性即可,极为方便。每个控件都有一个对应的单独的包含该控件源码的DEMO,方便参考使用。同时还提供一个所有控件使用的集成的DEMO。
每个控件的源代码都有详细中文注释,都按照统一设计规范编写,方便学习自定义控件的编写。每个控件默认配色和demo对应的配色都非常精美。超过130个可见控件,6个不可见控件。部分控件提供多种样式风格选择,多种指示器样式选择。所有控件自适应窗体拉伸变化。 集成自定义控件属性设计器,支持拖曳设计,所见即所得,支持导入导出xml格式。自带activex控件demo,所有控件可以直接运行在ie浏览器中。 集成fontawesome图形字体+阿里巴巴iconfont收藏的几百个图形字体,享受图形字体带来的乐趣。
所有控件最后生成一个dll动态库文件,可以直接集成到qtcreator中拖曳设计使用。在开发Qt应用程序时,为了程序上组件布局的美观,所以要给每个组件设定一个合适的大小和位置。用户在使用我们开发的程序的时候,会自己调整页面的大小,因此还需要再用户调整界面大小的时候,组件能够根据程序页面的调整,做出组件尺寸和组件内容大小的自适应调整,从而保证程序页面不会产生变形。在构造函数中的这个函数强制设置窗体的布局为固定大小,用户不可自行调整对话框大小。布局管理器将会负责调整大小的任务,当一些子窗口期间显示或隐藏的时候自动的调整对话框的大小,以保证对话框总是以优化了的大小显示。基于jquery和jquery ui的自动布局,并支持直接调整每个模块的大小和调整位置,且方便与后台传送数据。在鼠标移动至每个模块上时,右下角会出现调整的图标,可进行drag和resize。其中的插件gridstack是在github中查找下载的,大家可直接在下载其中的demo查看。
控件有水平伸展和垂直伸展的属性。(sizePolicy里)比如用splitter分割了上下2个GroupBox,2个垂直策略都是Expanding(扩展),第一个垂直伸展的值是2,第二个垂直伸展的值是1
那么出来的效果就是上下2个Group占界面高度为2:1,即2/3和1/3。
伸展设的值都是比例,不是大小。
策略里的各种属性都可以看下是什么意思,这样布局就很方便了。
具体介绍下:获取屏幕分辨率方法:
int currentScreenWid = QApplication::desktop()->width()
int currentScreenHei = QApplication::desktop()->height()
对于LABEL控件可以使用setScaledContents(true)允许其伸缩,对于LABEL上之前添加的图片也会跟随LABEL的大小伸缩而伸缩。
对于其他控件类型,可以定义一个简单的函数来实现他们的伸缩
void MLCNWidget::resetGrid(QWidget *widget,double factorx,double factory){
int widgetX = widget->x()
int widgetY = widget->y()
int widgetWid = widget->width()
int widgetHei = widget->height()
int nWidgetX = (int)(widgetX*factorx)
int nWidgetY = (int)(widgetY*factory)
int nWidgetWid = (int)(widgetWid*factorx)
int nWidgetHei = (int)(widgetHei*factory)
widget->setGeometry(nWidgetX,nWidgetY,nWidgetWid,nWidgetHei)
}
以上factorx,factory即指横纵方向上的伸缩比例,例如我原来的界面是设计的针对1920*1080分辨率的显示器的,而客户可能会把他拿到1680*1050分辨率的显示器上
所以factorx = 1680/1920.0
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)