Problem mit Visual Studio Add-in

Alles rund um die Programmierung mit Qt
Antworten
Phorx
Beiträge: 29
Registriert: 21. Mai 2009 22:36
Kontaktdaten:

Problem mit Visual Studio Add-in

Beitrag 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 :?
HappyEnding
Beiträge: 26
Registriert: 5. März 2009 14:15

Beitrag von HappyEnding »

Code waere nicht schlecht, damit man sich mal anschaun kann was da ueberhaupt passiert in deinem Projekt.
Phorx
Beiträge: 29
Registriert: 21. Mai 2009 22:36
Kontaktdaten:

Beitrag 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();
}

HappyEnding
Beiträge: 26
Registriert: 5. März 2009 14:15

Beitrag 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();
} 
forgoden
Beiträge: 120
Registriert: 10. Februar 2008 17:52

Beitrag 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
Phorx
Beiträge: 29
Registriert: 21. Mai 2009 22:36
Kontaktdaten:

Beitrag von Phorx »

Super! Vielen Dank an alle!
Mit "ui." davor klappt es :D
Antworten