一、前言
VS编写Qt代码时,使用Ui设计师界面,并提升部分自定义的控件后,会报错找不到头文件,原因在于 UIC编译生成.h文件时,引用头文件使用的#include<xxx.h> 而非 #include “xxx.h”。必须手动修改。
但是每次保存Ui文件,或者整体重新编译后都要手动修改,非常的麻烦,所以经过探索总结了一个方法去解决此问题。
二、解决思路
首先说明一个问题,为什么使用UI设计师界面,不直接手撸代码生成界面:目的在于快速生成界面,以及可视化后做出布局调整,效率很高。
所以为了保留原始的Ui布局,我们要做的就是手动将实例化的自定义控件添加到布局中,并移除原始的控件。注意是插入,然后在移除想要替换的控件。
下面的代码中:
TGraphicsView:自定义控件,需要插入到界面中
ui->graphicsView:在Ui设计师界面里,用来查看布局效果的原始控件,需要被替换
方式:查看ui.h的头文件,找到布局对象。然后在调用函数内重新编写部分代码,使用布局对象找到graphicsView的位置索引,使用insertWidget将TGraphicsView实例化的控件插入即可。
graphicsView_Ui = new TGraphicsView(this);
int index=ui->horizontalLayout_2->indexOf(ui->graphicsView);
ui->horizontalLayout_2->insertWidget(index, graphicsView_Ui);
ui->horizontalLayout_2->removeWidget(ui->graphicsView);
ui->graphicsView->deleteLater();
ui->horizontalLayout_2->setStretch(0, 3);
ui->horizontalLayout_2->setStretch(1, 1);
lab_Image1 = new TQLabel(this);
lab_Image2 = new TQLabel(this);
lab_Image3 = new TQLabel(this);
index = ui->verticalLayout->indexOf(ui->lab_Image1);
ui->verticalLayout->insertWidget(index, lab_Image3);
ui->verticalLayout->insertWidget(index, lab_Image2);
ui->verticalLayout->insertWidget(index, lab_Image1);
ui->horizontalLayout_2->removeWidget(ui->lab_Image1);
ui->horizontalLayout_2->removeWidget(ui->lab_Image2);
ui->horizontalLayout_2->removeWidget(ui->lab_Image3);
ui->lab_Image1->deleteLater();
ui->lab_Image2->deleteLater();
ui->lab_Image3->deleteLater();
ui->verticalLayout->setStretch(0, 1);
ui->verticalLayout->setStretch(1, 2);
ui->verticalLayout->setStretch(2, 2);
ui->verticalLayout->setStretch(3, 2);
三、效果展示
图片展示区里面的控件使用此方法加入到界面中的,有放大和缩小的效果,反复编译也不需要修改头文件了,