Seite 1 von 1

Problem mit Visual Studio Add-in

Verfasst: 21. Mai 2009 23:14
von Phorx
Hallo erstmal,

ich beschäftige mich noch nicht so lange mit QT und habe erst ein paar kleine Tutorials durchgearbeitet. Heute habe ich dieses VS Add-in entdeckt und war zu Beginn auch sehr begeistert. Allerdings kam es zu einigen Fehlermeldungen als ich wieder ein Tutorial nachprogrammierte...
nur die Form, welche ich im Visual Studio 2008 erstellt habe, lief einwandfrei als jedoch connects hinzukamen gings mit den Fehlern los.

Hier mal das was Visual Studio mir ausspuckt:

Code: Alles auswählen

1>------ Erstellen gestartet: Projekt: AddressBook, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>addressbook.cpp
1>.\addressbook.cpp(8) : error C2065: 'addButton': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(9) : error C2065: 'submitButton': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(10) : error C2065: 'cancelButton': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(20) : error C2065: 'nameLine': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(20) : error C2227: Links von "->text" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(21) : error C2065: 'addressText': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(21) : error C2227: Links von "->toPlainText" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(23) : error C2065: 'nameLine': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(23) : error C2227: Links von "->clear" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(24) : error C2065: 'addressText': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(24) : error C2227: Links von "->clear" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(26) : error C2065: 'addButton': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(26) : error C2227: Links von "->setReadOnly" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(27) : error C2065: 'submitButton': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(27) : error C2227: Links von "->show" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(28) : error C2065: 'cancelbutton': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(28) : error C2227: Links von "->show" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(33) : error C2065: 'nameLine': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(33) : error C2227: Links von "->text" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(34) : error C2065: 'addressText': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(34) : error C3861: "toPlainText": Bezeichner wurde nicht gefunden.
1>.\addressbook.cpp(45) : error C2228: Links von ".arg" muss sich eine Klasse/Struktur/Union befinden.
1>        Typ ist 'const char [40]'
1>.\addressbook.cpp(49) : error C2228: Links von ".arg" muss sich eine Klasse/Struktur/Union befinden.
1>        Typ ist 'const char [57]'
1>.\addressbook.cpp(55) : error C2065: 'nameLine': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(55) : error C2227: Links von "->clear" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(56) : error C2065: 'addressText': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(56) : error C2227: Links von "->clear" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(59) : error C2065: 'nameLine': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(59) : error C2227: Links von "->setReadOnly" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(60) : error C2065: 'addressText': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(60) : error C2227: Links von "->setReadOnly" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(61) : error C2065: 'addButton': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(61) : error C2227: Links von "->setReadOnly" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(62) : error C2065: 'submitButton': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(62) : error C2227: Links von "->hide" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(63) : error C2065: 'cancelButton': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(63) : error C2227: Links von "->hide" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(68) : error C2065: 'nameLine': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(68) : error C2227: Links von "->setText" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(69) : error C2065: 'nameLine': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(69) : error C2227: Links von "->setReadOnly" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(71) : error C2065: 'addressText': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(71) : error C2227: Links von "->setText" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(72) : error C2065: 'addressText': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(72) : error C2227: Links von "->setReadOnly" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(74) : error C2065: 'addButton': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(74) : error C2227: Links von "->setEnabled" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(75) : error C2065: 'submitButton': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(75) : error C2227: Links von "->hide" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
1>.\addressbook.cpp(76) : error C2065: 'cancelButton': nichtdeklarierter Bezeichner
1>.\addressbook.cpp(76) : error C2227: Links von "->hide" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
1>        Typ ist ''unknown-type''
Ich hoffe mir kann jemand sagen was da der Fehler sein könnte/müsste. Ist ja immer der gleiche wie es mir so aussieht, nur das ich keine Ahnung hab woran es liegt...
Falls ihr den Code braucht sagt bitte bescheid.

Ich hoffe mir kann jemand helfen :?

Verfasst: 21. Mai 2009 23:48
von HappyEnding
Code waere nicht schlecht, damit man sich mal anschaun kann was da ueberhaupt passiert in deinem Projekt.

Verfasst: 22. Mai 2009 00:18
von Phorx
Hier der Code aus den (für mich) wichtigsten Dateien ... oder das gesamte Projekt hier: http://remixshare.com/?file=yyfo6lb5wb


main.cpp

Code: Alles auswählen


#include "addressbook.h"
#include <QtGui/QApplication>

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	AddressBook addressbook;
	addressbook.show();
	return a.exec();
}

addressbook.h

Code: Alles auswählen


#ifndef ADDRESSBOOK_H
#define ADDRESSBOOK_H

#include <QtGui/QWidget>
#include "ui_addressbook.h"

class AddressBook : public QWidget
{
	Q_OBJECT

public:
	AddressBook(QWidget *parent = 0, Qt::WFlags flags = 0);
	~AddressBook();

public slots:
	void addContact();
	void submitContact();
	void cancel();

private:
	Ui::AddressBookClass ui;
	
	QMap<QString, QString> contacts;
	QString oldName;
	QString oldAddress;

};

#endif // ADDRESSBOOK_H

addressbook.ui

Code: Alles auswählen

/********************************************************************************
** Form generated from reading ui file 'addressbook.ui'
**
** Created: Thu 21. May 20:32:04 2009
**      by: Qt User Interface Compiler version 4.5.1
**
** WARNING! All changes made in this file will be lost when recompiling ui file!
********************************************************************************/

#ifndef UI_ADDRESSBOOK_H
#define UI_ADDRESSBOOK_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QGridLayout>
#include <QtGui/QHeaderView>
#include <QtGui/QLabel>
// ui_addressbook.h

#include <QtGui/QLineEdit>
#include <QtGui/QPushButton>
#include <QtGui/QTextEdit>
#include <QtGui/QVBoxLayout>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_AddressBookClass
{
public:
    QWidget *gridLayoutWidget;
    QGridLayout *gridLayout;
    QLabel *nameLabel;
    QLabel *addressLabel;
    QTextEdit *addressEdit;
    QLineEdit *nameLine;
    QWidget *widget;
    QVBoxLayout *verticalLayout;
    QPushButton *addButton;
    QPushButton *submitButton;
    QPushButton *cancelButton;

    void setupUi(QWidget *AddressBookClass)
    {
        if (AddressBookClass->objectName().isEmpty())
            AddressBookClass->setObjectName(QString::fromUtf8("AddressBookClass"));
        AddressBookClass->resize(600, 400);
        gridLayoutWidget = new QWidget(AddressBookClass);
        gridLayoutWidget->setObjectName(QString::fromUtf8("gridLayoutWidget"));
        gridLayoutWidget->setGeometry(QRect(10, 10, 481, 381));
        gridLayout = new QGridLayout(gridLayoutWidget);
        gridLayout->setSpacing(6);
        gridLayout->setMargin(11);
        gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
        gridLayout->setContentsMargins(0, 0, 0, 0);
        nameLabel = new QLabel(gridLayoutWidget);
        nameLabel->setObjectName(QString::fromUtf8("nameLabel"));
        QFont font;
        font.setPointSize(10);
        font.setBold(true);
        font.setItalic(true);
        font.setWeight(75);
        nameLabel->setFont(font);

        gridLayout->addWidget(nameLabel, 1, 0, 1, 1);

        addressLabel = new QLabel(gridLayoutWidget);
        addressLabel->setObjectName(QString::fromUtf8("addressLabel"));
        QFont font1;
        font1.setPointSize(10);
        font1.setBold(true);
        font1.setWeight(75);
        addressLabel->setFont(font1);
        addressLabel->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop);

        gridLayout->addWidget(addressLabel, 3, 0, 1, 1);

        addressEdit = new QTextEdit(gridLayoutWidget);
        addressEdit->setObjectName(QString::fromUtf8("addressEdit"));
        addressEdit->setReadOnly(true);

        gridLayout->addWidget(addressEdit, 3, 1, 1, 1);

        nameLine = new QLineEdit(gridLayoutWidget);
        nameLine->setObjectName(QString::fromUtf8("nameLine"));
        nameLine->setReadOnly(true);

        gridLayout->addWidget(nameLine, 1, 1, 1, 1);

        widget = new QWidget(AddressBookClass);
        widget->setObjectName(QString::fromUtf8("widget"));
        widget->setGeometry(QRect(510, 90, 77, 131));
        verticalLayout = new QVBoxLayout(widget);
        verticalLayout->setSpacing(6);
        verticalLayout->setMargin(11);
        verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
        verticalLayout->setContentsMargins(0, 0, 0, 0);
        addButton = new QPushButton(widget);
        addButton->setObjectName(QString::fromUtf8("addButton"));

        verticalLayout->addWidget(addButton);

        submitButton = new QPushButton(widget);
        submitButton->setObjectName(QString::fromUtf8("submitButton"));
        submitButton->setEnabled(false);

        verticalLayout->addWidget(submitButton);

        cancelButton = new QPushButton(widget);
        cancelButton->setObjectName(QString::fromUtf8("cancelButton"));
        cancelButton->setEnabled(false);

        verticalLayout->addWidget(cancelButton);

        QWidget::setTabOrder(nameLine, addressEdit);

        retranslateUi(AddressBookClass);

        QMetaObject::connectSlotsByName(AddressBookClass);
    } // setupUi

    void retranslateUi(QWidget *AddressBookClass)
    {
        AddressBookClass->setWindowTitle(QApplication::translate("AddressBookClass", "Einfaches Adressbuch", 0, QApplication::UnicodeUTF8));
        nameLabel->setText(QApplication::translate("AddressBookClass", "Name:", 0, QApplication::UnicodeUTF8));
        addressLabel->setText(QApplication::translate("AddressBookClass", "Addresse:", 0, QApplication::UnicodeUTF8));
        addButton->setText(QApplication::translate("AddressBookClass", "Hinzuf\303\274gen", 0, QApplication::UnicodeUTF8));
        submitButton->setText(QApplication::translate("AddressBookClass", "Einreichen", 0, QApplication::UnicodeUTF8));
        cancelButton->setText(QApplication::translate("AddressBookClass", "Abbrechen", 0, QApplication::UnicodeUTF8));
        Q_UNUSED(AddressBookClass);
    } // retranslateUi

};

namespace Ui {
    class AddressBookClass: public Ui_AddressBookClass {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_ADDRESSBOOK_H

addressbook.cpp

Code: Alles auswählen


#include <QtGui>
#include "addressbook.h"

AddressBook::AddressBook(QWidget *parent, Qt::WFlags flags)
	: QWidget(parent, flags)
{
	ui.setupUi(this);
	connect(addButton, SIGNAL(clicked()), this, SLOT(addContact()));
	connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact()));
	connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel()));
}

AddressBook::~AddressBook()
{

}

void AddressBook::addContact()
{
	oldName = nameLine->text();
	oldAddress = addressText->toPlainText();

	nameLine->clear();
	addressText->clear();

	addButton->setReadOnly(false);
	submitButton->show();
	cancelbutton->show();
}

void AddressBook::submitContact()
{
	QString name = nameLine->text();
	QString address = addressText-toPlainText();

	if(name == "" || address == "")
	{
		QMessageBox::information(this, "Leeres Feld", "Bitte geben Sie einen Namen und eine Adresse an.");
		return;
	}

	if(!contacts.contains(name))
	{
		contacts.insert(name, address);
		QMessageBox::information(this, "Hinzufügen erfolgreich", "\"%1\" wurde ins Addressbuch aufgenommen.".arg(name));
	}
	else
	{
		QMessageBox::information(this, "Hinzufügen fehlgeschlafen", "Entschuldigen Sie, \"%1\" ist bereits in Ihrem Addressbuch".arg(name));
		return;
	}

	if(contacts.isEmpty())
	{
		nameLine->clear();
		addressText->clear();
	}

	nameLine->setReadOnly(true);
	addressText->setReadOnly(true);
	addButton->setReadOnly(true);
	submitButton->hide();
	cancelButton->hide();
}

void AddressBook::cancel()
{
	nameLine->setText(oldName);
	nameLine->setReadOnly(true);

	addressText->setText(oldAddress);
	addressText->setReadOnly(true);

	addButton->setEnabled(true);
	submitButton->hide();
	cancelButton->hide();
}


Verfasst: 22. Mai 2009 08:46
von HappyEnding

Code: Alles auswählen

private:
   Ui::AddressBookClass ui; 
Das bedeutet, dass deine saemtlichen Widgets wie Buttons, Edits etc im Namespace "ui" liegen und die sie deshalb mit "ui." ansprechen musst, da dein Programm sonst nicht weiss was du meinst.
Probier mal:

Code: Alles auswählen

connect(ui.addButton, SIGNAL(clicked()), this, SLOT(addContact())); 
und fuere das dann fuer saemtliche Widgets weiter, dann sollte es eigentlich gehen, wenn nicht sag nochmal bescheid.
Also alla:

Code: Alles auswählen

void AddressBook::addContact()
{
   oldName = ui.nameLine->text();
   oldAddress = ui.addressText->toPlainText();

   ui.nameLine->clear();
   ui.addressText->clear();

   ui.addButton->setReadOnly(false);
   ui.submitButton->show();
   ui.cancelbutton->show();
} 

Verfasst: 22. Mai 2009 09:32
von forgoden

Code: Alles auswählen

class AddressBook : public QWidget
{
   Q_OBJECT 
in

Code: Alles auswählen

class AddressBook : public QWidget, public Ui::AddressBookClass
{
   Q_OBJECT 
oder private

und

Code: Alles auswählen

ui.setupUi(this); 
in

Code: Alles auswählen

setupUi(this);


das
Ui::AddressBookClass ui;
kann man dann auskommentieren

Verfasst: 22. Mai 2009 11:57
von Phorx
Super! Vielen Dank an alle!
Mit "ui." davor klappt es :D