簡體   English   中英

visual studio 2013神秘的C2228錯誤

[英]visual studio 2013 mysterious C2228 error

我最近將一些qt項目從2008年升級到2013年。我變得很奇怪

Error   1   error C2228: left of '.currentText' must have class/struct/union    

我嘗試訪問gui中的組合框時出錯。

這是代碼,很簡單:

videopanel.h
#ifndef VIDEOPANEL_H
#define VIDEOPANEL_H

#include <QCamera>
#include <QtWidgets>
#include <QMediaRecorder>
#include <QCameraImageCapture>
#include <QCameraViewFinder>
#include <QVideoWidget>

namespace Ui {
class videoPanel;
}

class videoPanel : public QWidget
{
    Q_OBJECT

public:
    explicit videoPanel(QWidget *parent = 0);
    ~videoPanel();

private slots:
    void monitorToggle(int state);

private:

    Ui::videoPanel *ui;

    QCamera *camera;
    QList<QCameraInfo> cameraInfos;
    QCameraImageCapture *imageCapture;
    QMediaRecorder* mediaRecorder;

    QImageEncoderSettings imageSettings;
    QAudioEncoderSettings audioSettings;
    QVideoEncoderSettings videoSettings;
    QString videoContainerFormat;
    bool isCapturingVideo;

    void setCamera(void);

};

#endif // VIDEOPANEL_H

這是cpp:videopanel.cpp

#include "videopanel.h"
#include "ui_videopanel.h"

#include <QMediaService>
#include <QMediaRecorder>
#include <QCameraViewfinder>
#include <QCameraInfo>
#include <QMediaMetaData>

#include <iostream>


videoPanel::videoPanel(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::videoPanel),
    camera(0),
    imageCapture(0),
    mediaRecorder(0)
{
    ui->setupUi(this); // fine!!!

    QObject::connect(ui->monitorCheck, SIGNAL(stateChanged(int)), this, SLOT(monitorToggle(int)) );



    // Camera devices:
    cameraInfos = QCameraInfo::availableCameras();
    // display device descriptions in combo box
    for (QList<QCameraInfo>::Iterator it = cameraInfos.begin();
        it != cameraInfos.end(); ++it)
        ui->cameraBox->addItem(it->description()); // fine!!!

}

videoPanel::~videoPanel()
{
    delete mediaRecorder;
    delete imageCapture;
    delete camera;
}

void videoPanel::setCamera(void) {

    delete imageCapture;
    delete mediaRecorder;
    delete camera;


    for (QList<QCameraInfo>::Iterator it = cameraInfos.begin();
        it != cameraInfos.end(); ++it)
        if (!it->description().compare(ui->cameraBox.currentText())) // not fine!!!
            camera = new QCamera(*it);

}


void videoPanel::monitorToggle(int state) {

    if (state == Qt::CheckState::Checked);
    std::cout << ui->cameraBox.currentText() << std::endl; // not fine!!!

}

我上面引用的錯誤來自第51和第60行,我嘗試訪問ui

所以在構造函數中,編譯器可以使用變量ui ,但不能在其他方法中使用。 這是很好的鍋爐板qt的東西,所以我不確定是什么問題,但是,我懷疑VS中有一些標志,它以某種方式模糊了我的ui變量的范圍。 我所有其他私有變量都沒問題,所以我不知道是什么問題。

我確信uic/moc進程正常工作,我嘗試過清理和重建無濟於事。

替換行:

if (!it->description().compare(ui->cameraBox.currentText()))
std::cout << ui->cameraBox.currentText() << std::endl;

通過:

if (!it->description().compare(ui->cameraBox->currentText()))
std::cout << ui->cameraBox->currentText() << std::endl;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM