Qt创建者可以选择将一个窗口小部件推广到从基本窗口小部件派生的自定义创建的类 - 我想用它来将窗口小部件升级到当前项目中的类.Qt创建者问我关于类名和头文件名,这些值直接转到*.ui文件,然后转到ui_myform.h - 问题是这个文件可能(并且通常是)在源代码树外生成(在构建树中) )可以在任意位置,因此在推广窗口中直接指定路径无济于事.如何让QtCreator/uic知道在哪里寻找正确的标题?它甚至可能吗?
也许有一些Qt变量specyfying源树的位置,我可以插入头文件名字段?
我正在使用自编译的QtCreator 2.0.1 +自编Qt 4.7.1.
编辑:
为什么不能只输入头文件的完整路径名?
如果我将移动源代码树,或者甚至在网上共享它,那么每个想要编译我的项目的人都必须在Qt创建者或源文件中编辑这个路径 - 两者都是不可接受的.
是否可以将实例提升为派生类的实例?
例如,假设有一个基类Vehicle.
Vehicle已派生类:Boat,Automobile,Airplane,等...
当Vehicle创建新的类型实例时,车辆的类型是未知的.
后来发现车辆是什么,说它是一个Boat.是否可以将Vehicle实例提升为Boat对象?
澄清:Vehicle实例可能已设置内容,并且提升的对象需要保留这些内容
PS我现在成功地做到了这一点,但是手工而且非常笨重.所以,我想知道是否有一种普遍接受的,规范的方式.
(2017年9月24日)Eric Lippert在下面的每个问题中添加了真实案例:
*我的整个C#体验都是自学成才的,所以我没有学术基础,对"模式"等知之甚少.工厂模式和复合模式的想法听起来很有趣,可能是解决问题的更好方法(需要研究).
我的实际情况是,我使用共享总线架构连接到计算机的测量设备(外围设备)自动进行电子测量.在任何给定的测试平台上,可以根据用户的选择连接各种不同的外围设备.为了自动确定哪些外设可用,我执行一个本地发现过程,找到每个连接外设的总线地址.然后,为了与发现的未知类型的外围设备通信,我创建了一个我调用的基类的实例Device. Device具有某些基本的I/O协议方法和属性,如总线地址,通信超时等.Device然后使用我查询外围设备的身份,找出制造商,型号和序列号.
从该信息I确定的外周的类型和希望"促进"的实例Device将在该外设类型,诸如以一个派生类的实例具体地SpectrumAnalyzer或Oscilloscope或任何.
我认为我在不知不觉中所做的是在工厂类和基类之间创建一个交叉.一旦知道了外围设备的类型,Device就有一个方法可以创建派生类的新实例,并将自己的属性深度复制到该派生实例.
也许如果我在工厂模式方面重新考虑解决方案而不是基类,我可以改进逻辑.
有趣的东西......谢谢你.*