您的位置:首页 > 编程语言 > Qt开发

移植到Qt4后一窗口部件在QSplitter上显示不出来问题原因查找处理

2013-12-23 21:20 246 查看
今天调试移植到Qt的一对话框发现其中添加到QSplitter上的一个列表树未显示出来,查找发现

此要显示的对象是Ui_xxxx的派生类,此派生类的第一父类应为QWidget,而移植时错写成了

QDialog,相应的其构造函数变量初始化处的父类名也错写成了QDialog(Qparent),

改正后可以显示出来了。这里与Qt3to4时的两点移植规则有关:

1. ui的派生类要多重继承,首先继承uic自动生成的Ui_*类的setupUi函数中参数的Qt的

对应类名,其次继承自动生成的Ui_*类,顺序不能反;

2. 派生类的构造函数,首先把在成员变量初始化处的Qt3时使用的父类名改成现继承的

第一个父类名,其次在构造函数第一行中添加setupUi(this);语句。查找此问题过程中

测试发现当把QDialog对象用addWiget()函数加到QSplitter对象中时,创建QDialog

对象时若指定父对象为QSplitter对象,则此QDialog显示不出来,不指定父对象时可以显示

出来。例如,以下语句能正常显示:

QSplitter
*spHori = new QSplitter(this,"spHori"); 

spHori->setOrientation(Qt::Horizontal);

QDialog *dialog = new QDialog();

spHori->addWidget(dialog);

但若将其中的创建QDialog对象语句换成下面一句则QDialog将显示不出来:

QDialog *dialog =
new QDialog(spHori);

当然,一般不会这样用,即一般不会把QDialog添加到QSplitter上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  移植 对话框 ui
相关文章推荐