Qt moc_文件问题

Qt moc_文件问题,qt,function,user-input,qlineedit,moc,Qt,Function,User Input,Qlineedit,Moc,我是一名学生程序员,我正在使用Qt为工作构建一些GUI应用程序,我已经一次又一次地遇到moc问题。我希望能解决我目前面临的问题;然而,如果任何在Qt方面经验丰富的人能够在对cpp文件进行更改时就如何正确处理这些文件提供一些帮助,我将不胜感激。在我最近的更改中(很抱歉,我无法发布它的外观,因为它显然已被重新构造),我通过在checkData函数中嵌套一个函数来验证数据。因为我想为每个可能无效的字段显示一个特定的错误,所以我开始为每个QLineEdit创建一个函数。我意识到这将不起作用(或者至少会产

我是一名学生程序员,我正在使用Qt为工作构建一些GUI应用程序,我已经一次又一次地遇到moc问题。我希望能解决我目前面临的问题;然而,如果任何在Qt方面经验丰富的人能够在对cpp文件进行更改时就如何正确处理这些文件提供一些帮助,我将不胜感激。在我最近的更改中(很抱歉,我无法发布它的外观,因为它显然已被重新构造),我通过在checkData函数中嵌套一个函数来验证数据。因为我想为每个可能无效的字段显示一个特定的错误,所以我开始为每个QLineEdit创建一个函数。我意识到这将不起作用(或者至少会产生更多的工作),而不仅仅是提供信息的顺序检查。下面是没有原始嵌套函数的新代码:

void InjectionDialog::checkData() {
   bool validateFluidVelocity;
   QString tempStrFluidVelocity;
   tempStrFluidVelocity = ui->lineEditFluidVelocity->text();
   double convertedFluidVelocity =
      tempStrFluidVelocity.toDouble(&validateFluidVelocity);
   if (validateFluidVelocity == false) {
      QErrorMessage validateErrorFluidVelocityError;
      validateErrorFluidVelocityError.
         showMessage("Fluid velocity input is invalid");
      validateErrorFluidVelocityError.exec();
   }
   else {
      transData.lineEditFluidVelocity = convertedFluidVelocity;
   }
   bool validateFluidMassFlow;
   QString tempStrFluidMassFlow;
   tempStrFluidMassFlow = ui->lineEditFluidMassFlow->text();
   double convertedFluidMassFlow =
      tempStrFluidMassFlow.toDouble(&validateFluidMassFlow);
   if (validateFluidMassFlow == false) {
      QErrorMessage validateErrorFluidMassFlowError;
      validateErrorFluidMassFlowError.
         showMessage("Fluid mass flow input is invalid");
      validateErrorFluidMassFlowError.exec();
   }
   else {
      transData.lineEditFluidMassFlow = convertedFluidMassFlow;
   }
   bool validateParticleVelocity;
   QString tempStrParticleVelocity;
   tempStrParticleVelocity = ui->lineEditParticleVelocity->text();
   double convertedParticleVelocity =
      tempStrParticleVelocity.toDouble(&validateParticleVelocity);
   if (validateParticleVelocity == false) {
      QErrorMessage validateErrorParticleVelocity;
      validateErrorParticleVelocity.
         showMessage("Particle velocity input is invalid");
      validateErrorParticleVelocity.exec();
   }
   else {
      transData.lineEditParitcle_sic_Velocity = convertedParticleVelocity;
   }
   bool validateParticleMassFlow;
   QString tempStrParticleMassFlow;
   tempStrParticleMassFlow = ui->lineEditParticleMassFlow->text();
   double convertedParticleMassFlow =
      tempStrParticleMassFlow.toDouble(&validateParticleMassFlow);
   if (validateParticleMassFlow == false) {
      QErrorMessage validateErrorParticleMassFlow;
      validateErrorParticleMassFlow.
         showMessage("Particle mass flow input is invalid");
      validateErrorParticleMassFlow.exec();
   }
   else {
      transData.lineEditParticleMassFlow = convertedParticleMassFlow;
   }
}
最初我在第一次检查时使用InjectionDialog::checkFluidVelociy,但很快就决定不使用它。现在,随着代码重组,我收到了错误:

在函数“InjectionDialog::checkFluidVelocity(QMetaObject::Call,int,void**)”中: 此错误引用到moc_injectionDialog.o

对“InjectionDialog::checkFluidVelocity()的未识别引用” 此错误引用到moc_injectiondialog.cpp

在moc_injectiondialog中,我列出了以下内容:

/****************************************************************************
** Meta object code from reading C++ file 'injectiondialog.h'
**
** Created: Sat Jan 7 21:58:22 2012
**      by: The Qt Meta Object Compiler version 62 (Qt 4.7.4)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/

#include "../InjectionGUI/injectiondialog.h"
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'injectiondialog.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 62
#error "This file was generated using the moc from 4.7.4. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif

QT_BEGIN_MOC_NAMESPACE
static const uint qt_meta_data_InjectionDialog[] = {

 // content:
       5,       // revision
       0,       // classname
       0,    0, // classinfo
       2,   14, // methods
       0,    0, // properties
       0,    0, // enums/sets
       0,    0, // constructors
       0,       // flags
       0,       // signalCount

 // slots: signature, parameters, type, tag, flags
      17,   16,   16,   16, 0x08,
      29,   16,   16,   16, 0x08,

       0        // eod
};

static const char qt_meta_stringdata_InjectionDialog[] = {
    "InjectionDialog\0\0checkData()\0"
    "checkFluidVelocity()\0"
};

const QMetaObject InjectionDialog::staticMetaObject = {
    { &QDialog::staticMetaObject, qt_meta_stringdata_InjectionDialog,
      qt_meta_data_InjectionDialog, 0 }
};

#ifdef Q_NO_DATA_RELOCATION
const QMetaObject &InjectionDialog::getStaticMetaObject() { return staticMetaObject; }
#endif //Q_NO_DATA_RELOCATION

const QMetaObject *InjectionDialog::metaObject() const
{
    return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
}

void *InjectionDialog::qt_metacast(const char *_clname)
{
    if (!_clname) return 0;
    if (!strcmp(_clname, qt_meta_stringdata_InjectionDialog))
        return static_cast<void*>(const_cast< InjectionDialog*>(this));
    return QDialog::qt_metacast(_clname);
}

int InjectionDialog::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
    _id = QDialog::qt_metacall(_c, _id, _a);
    if (_id < 0)
        return _id;
    if (_c == QMetaObject::InvokeMetaMethod) {
        switch (_id) {
        case 0: checkData(); break;
        case 1: checkFluidVelocity(); break;
        default: ;
        }
        _id -= 2;
    }
    return _id;
}
QT_END_MOC_NAMESPACE
/****************************************************************************
**元对象代码从读取C++文件“注入对话”
**
**创建时间:2012年1月7日星期六21:58:22
**作者:Qt元对象编译器版本62(Qt 4.7.4)
**
**警告!在此文件中所做的所有更改都将丢失!
*****************************************************************************/
#包括“./InjectionGUI/injectiondialog.h”
#如果!已定义(Q_MOC_输出_修订版)
#错误“头文件'injectiondialog.h'不包括。”
#elif Q_MOC_输出版本!=62
#错误“此文件是使用4.7.4.It中的moc生成的”
#错误“不能与此版本Qt中的包含文件一起使用。”
#错误“(主运行中心更改太多)。”
#恩迪夫
QT\u开始\u运行\u名称空间
静态常量qt_元数据_注入对话框[]={
//内容:
5、//修订
0,//类名
0,0,//classinfo
2,14,//方法
0,0,//属性
0,0,//枚举/集合
0,0,//构造函数
0,//标志
0,//信号计数
//插槽:签名、参数、类型、标记、标志
17,16,16,16,0x08,
29,16,16,16,0x08,
0//eod
};
静态常量字符qt_meta_stringdata_InjectionDialog[]={
“注入对话框\0\0检查数据()\0”
“checkFluidVelocity()\0”
};
常量QMetaObject InjectionDialog::staticMetaObject={
{&QDialog::staticMetaObject,qt_meta_stringdata_InjectionDialog,
qt_元数据_注入对话框,0}
};
#ifdef Q_无数据_重新定位
常量QMetaObject&InjectionDialog::getStaticMetaObject(){return staticMetaObject;}
#endif//Q\u无数据\u重新定位
常量QMetaObject*注入对话框::元对象()常量
{
返回QObject::d_ptr->metaObject?QObject::d_ptr->metaObject:&staticMetaObject;
}
void*InjectionDialog::qt\u metacast(const char*\u clname)
{
如果(!\u clname)返回0;
if(!strcmp(\u clname,qt\u meta\u stringdata\u InjectionDialog))
返回static_cast(const_cast(this));
返回QDialog::qt\u metacast(\u clname);
}
int-InjectionDialog::qt\u元调用(QMetaObject::Call\u c,int\u id,void**a)
{
_id=QDialog::qt_元调用(_c,_id,_a);
如果(_id<0)
返回_id;
if(_c==QMetaObject::InvokeMetMethod){
开关(_id){
案例0:checkData();中断;
案例1:checkFluidVelocity();中断;
违约:;
}
_id-=2;
}
返回_id;
}
QT_END_MOC_名称空间

我看过其他一些moc_文件帖子,大多数帖子都说让Qt清理并重建项目。我已经运行了一个项目清理和重建所有试图大修这个moc文件,但没有任何成功地摆脱错误。这似乎是一个bug,但我在网上找不到任何关于它的信息,所以可能是我不知道的东西。提前感谢您提供的任何帮助

每当我遇到MOC问题时,我会构建->清除所有问题,然后构建->运行qmake(Qt-creatoride)。如果这不能解决我的问题,我会进入我的项目文件夹,删除moc_*文件和任何其他Clean无法删除的垃圾,基本上只留下标题、源和资源。

每当我遇到moc问题时,我会生成->全部清除,然后生成->运行qmake(Qt Creator IDE)。如果这不能解决我的问题,我会进入我的项目文件夹,删除moc_*文件和任何其他无法清除的垃圾-基本上只留下标题、源和资源。

转到抛出错误的moc文件。在顶部,将有一个include语句,其中包含该窗口的头文件,而不是ui_uu.h,只是.h
如果有对导致错误的小部件的引用,请检入该文件。

转到引发错误的moc文件。在顶部,将有一个include语句,其中包含该窗口的头文件,而不是ui_uu.h,只是.h
如果有对导致错误的小部件的引用,请检入该文件。

您是说您删除了方法
InjectionDialog::checkFluidVelociy
,但仍然会收到错误?是;moc文件正在抛出一个错误,就好像它仍然存在一样。我已经运行了clean,qmake,删除了moc_文件,我仍然收到一个错误。它还表示moc文件已更改很多..您是说您删除了方法
InjectionDialog::checkFluidVelociy
,但仍然会收到错误?是的;moc文件正在抛出一个错误,就好像它仍然存在一样。我已经运行干净,qmake,删除了任务单