本文主要是介绍OpenCASCADE入门——7.8.0版本通过源码自编译,生成解决方案,用draw进行简单尝试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 引出
- OpenCASCADE源码自编译
- 首先安装cmake 和 vs
- 然后安装两个重要的库TCL/TK和FreeType
- TCL/TK的安装
- nmake编译【失败的尝试】
- activestate上下载安装包【失败】
- 官网论坛查,也失败
- 编译的再次尝试【应该是64位】
- FreeType安装
- 进行编译
- 用cmake进行编译
- 最终生成解决方案
- 设置启动项,运行
- 总结
- 其他
- 自定义信号和槽
- 1.自定义信号
- 2.自定义槽
- 3.建立连接
- 4.进行触发
- 自定义信号重载
- 带参数的
- 按钮触发
- 信号触发信号
- 拓展
- lambda表达式
- 返回值
- mutable修饰
- 案例
引出
OpenCASCADE入门——7.8.0版本通过源码自编译,生成解决方案,用draw进行简单尝试
OpenCASCADE源码自编译
首先安装cmake 和 vs
Windows下CMake安装教程_window 安装cmake-CSDN博客
然后安装两个重要的库TCL/TK和FreeType
构建 OCCT - Open CASCADE Technology Documentation
开放式 CASCADE 技术:构建 OCCT (opencascade.org)
如果没有配置好第三方库就会报错
官网文档中说明了要先安装好这两个库
TCL/TK的安装
https://www.tcl.tk/doc/howto/compile.html
nmake编译【失败的尝试】
插曲:处理windows下,‘nmake‘不是内部或外部命令,也不是可运行的程序或批处理文件
然后我装了一个msvc编译环境,但其实不是这样搞的
还是报错,说Visual C++compiler environment not initialized.
期间还重启电脑,安装编译库,均以失败告终
重启了电脑,然后装了一个库
以上的尝试以失败告终
正确的nmake方式是打开如下控制台窗口
activestate上下载安装包【失败】
https://www.activestate.com/products/tcl/
需要注册一个账号,才可以下载
[Tcl/Tk 安装 - 哔哩哔哩 (bilibili.com)](https://www.bilibili.com/read/cv22487672/#:~:text=点击绿色的 Download Latest Version 按钮,下载最新版。 注意:默认下载的是x64版,针对64位系统。 如果使用的是32位的win7,则应该下载tcl-8.6.13-installer-1.13.0-x86.msi 下载之后双击安装包就可以安装,安装完毕后,在window开始菜单中会出现:,其中Tcl dommand shell对应Tcl语言解释器 tclsh.exe Tk graphical console对应Tk图形解释器 wish.exe)
终于TCL,TK安装成功
但是这个后面在vs中编译会报错
官网论坛查,也失败
TKDraw 项目无法在 W32 中构建。( 7.5.0 版 ) - 论坛 Open Cascade Technology
即便在官网的论坛中找解决方案还是不行
编译的再次尝试【应该是64位】
tcl/tk编译 - ParamousGIS - 博客园 (cnblogs.com)
这个有误,应该用64位的那个编译
D:\PetFile\myPrograme\theThridPackage\tclBuid
nmake -f makefile.vc INSTALLDIR=D:\PetFile\myPrograme\theThridPackage\tclBuid TCLDIR=D:\PetFile\myPrograme\theThridPackage\tcl8.6.14
以上版本出现问题,应该用64位编译
FreeType安装
进行编译
进入这个目录,用vs打开,打开后运行一下,获得编译后DLL文件
D:\PetFile\myPrograme\theThridPackage\freetype-2.10.1\builds\windows\vc2010
上面这种错误方式后面会报错
中间有问题,后来又重新生成了一下
然后在cmake中配置这些第三方的包
上面用的是错误的包,失败了
用cmake进行编译
点击configure进行配置的验证
最后点击generate生成
最终生成解决方案
Windows11+VS2022+OCCT7.6.0安装配置记录_vs2022 occ-CSDN博客
设置启动项,运行
总结
OpenCASCADE入门——7.8.0版本通过源码自编译,生成解决方案,用draw进行简单尝试
其他内容
其他
自定义信号和槽
1.自定义信号
写到signals下
返回void
需要声明,不需要实现
可以有参数,可以重戟
2.自定义槽
返回void
需要声明,也需要实现
可以有参数,可以重载
写到public slot下或者public或者全局函数
3.建立连接
// 老师饿了,学生请吃饭
connect(te,&Teacher::hungry,st,&Student::treat);
4.进行触发
自定义信号重载
当自定义信号和槽出现重载
8.1 需要利用还数指针明确指向函数的地址·
8.2void(Teacher::tsignal )QString )=&Teacher::hungry;
8.3 QString转成char *
8.3.1.ToUtf80转为QByteArray
8.3.2.Data0转为Char *
8.4信号可以连接信号
8.5断开信号disconnect
带参数的
void (Teacher::*teacherSignal)(QString) = &Teacher::hungry;void (Student::*StudentSlot)(QString) = &Student::treat;
void Student::treat(QString foodName){// QString -> char * 先转成QByteArray(.toUtf8()) 再转成Char* ()qDebug() << "请老师吃。。。" << foodName.toUtf8().data();
}
按钮触发
// 用一个按钮调用下课QPushButton *btn = new QPushButton("下课了",this);// 重置窗口daxiaothis->resize(600,400);connect(btn,&QPushButton::clicked,this,&Widget::classIsOver);
信号触发信号
// 无参的信号和槽连接void (Teacher::*teacherSignal2)(void) = &Teacher::hungry;void (Student::*StudentSlot2)(void) = &Student::treat;connect(te,teacherSignal2,st,StudentSlot2);// 信号连接信号connect(btn,&QPushButton::clicked,te,teacherSignal2);
断开信号disconnect
拓展
1、信号是可以连接信号
2、一个信号可以连接多个槽函数
3、多个信号可以连接同一个糟函数
4、信号和槽函数的参数必须类型一一对应
5、信号和槽的参数个数是不是要一致?信号的参数个数可以多余槽函数的参数个数
connect(信号的发送者,发送的信号signal信号),信号接受者,槽函数SLOT)
优点:参数直观
缺点:编译器不会检测爸数类型:
lambda表达式
[=](){btn->setText("aaa");}();
返回值
int ret = []()->int{return 1000;}();qDebug() << "ret = " << ret;
mutable修饰
QPushButton *myBtn1 = new QPushButton(this);QPushButton *myBtn2 = new QPushButton(this);myBtn1->move(100,100);int m = 10;connect(myBtn1,&QPushButton::clicked,this,[m]()mutable {m=100+10;qDebug()<< m;});connect(myBtn2,&QPushButton::clicked,this,[=](){qDebug()<<m;});qDebug() << m;
案例
QPushButton * btnClose = new QPushButton;btnClose->setText("close");btnClose->move(100,0);btnClose->setParent(this);connect(btnClose,&QPushButton::clicked,this,[=](){btnClose->setText("关闭");emit te->hungry("娃哈哈");
// this->close();});
这篇关于OpenCASCADE入门——7.8.0版本通过源码自编译,生成解决方案,用draw进行简单尝试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!