在CloudCompare平台下进行开发时,部分子程序需要自己设计界面,年纪大了以免后面忘记,特此记录,
step 1:在Qt Designer 中设计界面,生成*.ui文件;
step 2:在cmd命令窗口中cd到Qt Designer所在的bin文件夹下面;
step 3:在cmd命令窗口中输入 uic[空格]-o[空格]ui_*.h[空格]*.ui,
其中,ui_*.h文件为产生的文件, *.ui文件为step 1中的*.ui文件;
step 4:在VS2017工程中添加*_dialog.h和*_dialog.cpp文件,并建立与界面相对应的响应函数;
step 5:在cmd命令窗口中输入 moc *_dialog.h[空格]-o[空格]moc_*.cpp,
其中,*_dialog.h文件为step 4中自己建立的对话框文件,moc_*.cpp为生成的moc文件。
注意:每次修改ui界面时,都要重复一次以上步骤,
若在CloudCompare中新建的插件没有响应,解决方案:
cmd中输入 moc plugin中的qMyplugins.h -o moc_*.cpp,
比如ui界面是这样的
贴一下*_dialog.h代码
/*-------------------------------------------_dialog.h-------------------------------------------*/
#ifndef _AUTO_COMPUTE_ALL_DIALOG_H_
#define _AUTO_COMPUTE_ALL_DIALOG_H_
//Qt
#include
#include
#include "ui_mydescriptor.h"
class AutoComputeAllDialog :public QDialog, public Ui::MyDescriptorDialog
{
Q_OBJECT
public:
explicit AutoComputeAllDialog(QWidget* parent = 0);
virtual ~AutoComputeAllDialog() {}
int Getindex() { return m_index; }
int GetRadius() { return m_radius; }
int GetGridSize() { return m_gridsizel; }
int GetSampling() { return m_sample; }
double GetRatio() { return m_ratio; }
protected slots:
//关键点采样算法的序号
void setValue_index(int);
//半径
void SetValue_Radius(int);
//格网大小
void SetValue_GridSize(int);
//采样
void SetValue_Sampling(int);
//ratio
void SetValue_ratio(double);
private:
int m_index;//选择的序号
int m_radius; //半径
int m_gridsizel;; //格网
int m_sample; //采样
double m_ratio; // 比率
};
#endif
/*----------------------------------*_dialog.cpp---------------------------------------*/
#include "mydescriptor_dialog.h"
#include
#include
#include
#include
#include "qmessagebox.h"
AutoComputeAllDialog::AutoComputeAllDialog(QWidget* parent) : QDialog(parent)
, Ui::MyDescriptorDialog()
{
setupUi(this);
//connect(keypointcomboBox,SIGNAL(currentIndexChanged(QString)),this,SLOT(print_s()));
connect(keypointcomboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setValue_index(int)));// 关键点算法序号
connect(radiusspinBox, SIGNAL(valueChanged(int)), this, SLOT(SetValue_Radius(int)));//半径
connect(gridspinBox, SIGNAL(valueChanged(int)), this, SLOT(SetValue_GridSize(int)));//格网
connect(samplingspinBox, SIGNAL(valueChanged(int)), this, SLOT(SetValue_Sampling(int)));//采样
connect(ratiodoubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(SetValue_ratio(double)));//比率
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
}
void AutoComputeAllDialog::setValue_index(int value)
{
m_index = value;
}
void AutoComputeAllDialog::SetValue_Radius(int value)
{
m_radius = value;
}
void AutoComputeAllDialog::SetValue_GridSize(int value)
{
m_gridsizel = value;
}
void AutoComputeAllDialog::SetValue_Sampling(int value)
{
m_sample = value;
}
void AutoComputeAllDialog::SetValue_ratio(double value)
{
m_ratio = value;
}