我有一个mainDialog,是UI Designer设计的,其中有一个自定义控件,是由普通widget提升得到的。当然,我可以在这个自定义控件的构造函数中添加参数,但Qt工具生成的ui_mainDialog.h文件中会自动创建自定义控件,例如widget = new QtCustomWidget(mainDialog),其构造函数只有的一个QDialog类型的参数,这样就会引起编译错误。
请问该如何做,既可以让自定义控件借助UI designer来设计界面,又可以让我把自定义控件的创建步骤放在mainDialog的构造函数中,自己来掌控,而不是让UIC自动创建呢?
我不需要把这个自定义控件集成到UI designer中去,因为不是常用的常规控件。
15 个解决方案
重载一个带多参数的构造函数。在new的时候把参数依次传递进去就可以了。
把uic生成的.h和.cpp的类不动,在这个类的基础上继承出一个新类,构造函数可以有多个参数。
把易变的和基本不变的分离。
你用文本编辑器打开mainDialog.ui这个文件,看到下面的这种xml文件信息
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainDialog</class>
<widget class="QDialog" name="MainDialog">
把MainDialog替换成你继承出来的新类试试?
不要用designer设计的UI,自己从新写一个widget。细粒度操作。
重写一个新类,让这个类继承ui设计器生成的类
在这个新类中做你想做的一切。
ui设计器生成的代码是不能随便动的。
ui_mainDialog.h是自动生成的,里面带有setupUi函数,我大概明白楼主的意思了,是在一个窗体中的某个控件在setupUI里面被自动创建了。
其实我觉得楼主完全可以换个思路,不要把代码全写在widget的构造函数内,把需要执行的代码,安排在父窗口的ui->setupUI()之后执行就可以了吧?
楼主知音啊~ 表示遇上同样的问题了~ 看来也只能换个思路或者重写一下setupUi了。