QT3 Programm auf QT4 //Beispiel Buch

Alles rund um die Programmierung mit Qt
Antworten
Zephyr
Beiträge: 31
Registriert: 17. Februar 2009 14:29

QT3 Programm auf QT4 //Beispiel Buch

Beitrag von Zephyr »

Hi an Alle

Ich bin zur Zeit in einem Praktikum und muss dafür QT 4 lernen ,leider hate ich in QT, sowie C++ nie programmiert. Ich hab zu allem übel nur ein QT3 Buch zum lesen und da sind einige Teile veraltet ,bisher konnte ich das sehr gut lösen aber bei einer Stelle haperts ,da komm ich nicht weiter...

ich poste mal meinen code

finddialog.h

Code: Alles auswählen

/*
 *  main.h
 *  QT_FE_2_1
 *
 *  Created by Alexander  on 17.02.09.
 *  Copyright 2009 __MyCompanyName__. All rights reserved.
 *
 */

#ifndef FINDDIALOG_H
#define FINDDIALOG_H

#include <qdialog.h>

class QCheckBox;
class QLabel;
class QLineEdit;
class QPushButton;

class FindDialog : public QDialog
{
Q_OBJECT
public:
	FindDialog(QWidget *parent = 0, const char *name = 0);
signals:
void findNext(const QString &str, bool caseSensitive);
void findPrev(const QString &str, bool caseSensitive);

private slots:
void findClicked();
void enableFindButton(const QString &text);

private:
QLabel *label;
QLineEdit  *lineEdit;
QCheckBox *caseCheckBox;
QCheckBox *backwardCheckBox;
QPushButton *findButton;
QPushButton *closeButton;

};

#endif


hier meine finddialog.cpp

Code: Alles auswählen


/*
 *  main.cpp
 *  QT_FE_2_1
 *
 *  Created by Alexander  on 17.02.09.
 *  Copyright 2009 __MyCompanyName__. All rights reserved.
 *
 */

#include <qcheckbox.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qlineedit.h>
#include <qpushbutton.h>


#include "finddialog.h"


FindDialog::FindDialog(QWidget *parent,const char *name) : QDialog(parent,name)
//Hier tritt der Fehler auf


{
	setWindowTitle(tr("Find"));
	
	label = new QLabel(tr("Find &what:"), this);
	lineEdit = new QLineEdit(this);
	label->setBuddy(lineEdit);
	
	caseCheckBox = new QCheckBox(tr("Match &case"), this);
	backwardCheckBox = new QCheckBox (tr("Search &backward"), this);
	
	findButton = new QPushButton(tr("&Find"), this);
	findButton->setDefault(true);
	findButton->setEnabled(false);
	
	closeButton = new QPushButton(tr("Close"), this);
	
	
	connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(enableFindButton(<#const QString#> &)));
	connect(findButton, SIGNAL(clicked()), this, SLOT(findclicked()));
	connect(closeButton, SIGNAL(clicked()),this,SLOT(close()));
	
	
			QHBoxLayout *topLeftLayout = new QHBoxLayout;
			topLeftLayout->addWidget(label);
			topLeftLayout->addWidget(lineEdit);
			
			QVBoxLayout *leftLayout = new QVBoxLayout;
			leftLayout->addLayout(topLeftLayout);
			leftLayout->addWidget(caseCheckBox);
			leftLayout->addWidget(backwardCheckBox);
	
			QVBoxLayout *rightLayout = new QVBoxLayout;
			rightLayout->addWidget(findButton);
			rightLayout->addWidget(closeButton);
			rightLayout->addStretch(1);
			
			QHBoxLayout *mainLayout = new QHBoxLayout(this);
			mainLayout->setMargin(11);
			mainLayout->setSpacing(6);
			mainLayout->addLayout(leftLayout);
			mainLayout->addLayout(rightLayout);
			
			}

der fehler erscheint bei meinem Kommentat,der Compiller meldet:
no matching function for Call to 'QDialog::QDialog(QWidget*&, const char*&)'

Hat jemand von euch vielleicht jemand einen Rat wie ich das lösen kann ?
Was besagt diese Fehlermeldung genau und wodurch tritt der Fehler auf ?


zur Information, das Buch um welches es sich handelt ist: C++ Gui Programming with Qt3
von Jasmin Blanchette
und Mark Summerfield


Vielen Dank für Eure Antworten im Vorraus
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Wenn du dich wirklich an ein Buch klammern willst, hol dir einfach das aktuelle zu Qt4 (Galileo oder Addison-Wesley haben AFAIR eines im Programm)
Und für dein Problem würde ein Blick in die Doku.
Ja, die Qt4-Doku ist gigantisch (->assistant). Da erübrigt sich fast jedes Buch, wenn man C++ kann.
Zephyr
Beiträge: 31
Registriert: 17. Februar 2009 14:29

Beitrag von Zephyr »

das ist leider mein Problem ,ich kann leider kein c++


ich hab ne aktuelle Version von dem Programm im Netz gefunden (also eine QT4 Variante ,diesmal scheint der Fehler schwerwiegender zu sein ,da schätze ich ist der Fehler nicht im Code ,diese Fehler bekam ich in meinem Programm also ich es schon korrigiert habe.

XCode sagt:

Line Location Tool:0: "FindDialog::enableFindButton(QString const&)", referenced from:

Line Location Tool:0: "FindDialog::findClicked()", referenced from:

Line Location Tool:0: "qInitResources_application()", referenced from:


zum Buch ,ich bekomme ein neues aber ich muss erstmal mit diesem auskommen ,ich werde erstmal versuchen ein Lösung für das neue Problem zu finden, vielleicht kennt jemand dieses Problem schon
Zuletzt geändert von Zephyr am 17. Februar 2009 15:49, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Dann lern erstmal C++ bevor Du mit einem C++-Framework anfängst.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Zephyr
Beiträge: 31
Registriert: 17. Februar 2009 14:29

Beitrag von Zephyr »

naja das wie gesagt ich bin leider hier im Praktikum ,mache das ganze also nicht freiwillig und meine Vorgesetzten möchten dass ich C++ und QT im Zusammenspiel lerne.

Private könnte ich mich mit C++ selber beschäftigen, hat da jemand für Ratschläge bzw ein gutes Buch ?
erpheus
Beiträge: 46
Registriert: 18. November 2008 11:55
Wohnort: Stuttgart

Beitrag von erpheus »

Aber hier ne Lösung zu deinem Problem:

Code: Alles auswählen

FindDialog::FindDialog(QWidget *parent,const char *name) : QDialog(parent,name) 
Du hast ja geschrieben, dass Du neben Qt auch noch C++ lernen musst. In obigen Code kommt wie Du schreibst deine Fehlermeldung.

Also Du lässt deine Klasse FindDialog von QDialog erben. Mit obigen Code rufst du vor deinem eigenen Konstrukten den von QDialog auf mit parent und name als Übergabeparmeter. Der ':' steht hier für einen Instanziierungsparamter. Das bedeudet danach kommt eine Liste von Werten die vor dem Konstruktor inizialisiert werden sollen. Dahe erst der Aufruf des QDialog Konstruktors.

Mit den bereits genannten Übergabeparametern müßtees also in der Klase QDialog folgenden Konstruktor geben:

Code: Alles auswählen

QDialog::QDialog(QWidget* parent, const char* name)
Deine Fehlermeldung sagt Dir nun das es diesen nicht gibt.

Also ab einen Blick in die Qt-Doku (Qt-Assistent) und in der Klassendoku von QDialog nach schauen.
Feststellung den gibt es nicht.

Sondern nur den hier:

Code: Alles auswählen

QDialog ( QWidget * parent = 0, Qt::WindowFlags f = 0 )
Zephyr
Beiträge: 31
Registriert: 17. Februar 2009 14:29

Beitrag von Zephyr »

danke für deine Hilfe ,dieses Problem hab ich allerdings schon gelöst und bekomme dafür andere


Undefined symbols:
"_main", referenced from:
__start in crt1.o
"FindDialog::findClicked()", referenced from:
FindDialog::qt_metacall(QMetaObject::Call, int, void**)in moc_finddialog.o
"FindDialog::enableFindButton(QString const&)", referenced from:
FindDialog::qt_metacall(QMetaObject::Call, int, void**)in moc_finddialog.o
ld: symbol(s) not found



hier wenn ichs nicht in xcode sondern mit g++ übersetze
ist also die selbe fehlermeldung wie bei xcode ,kann also ausschließen dass es daran liegt ,hier bin ich aber wirklich überfragt…

hier noch mal das selbe mit der debug option

Code: Alles auswählen

Reaping winning child 0x001161e0 PID 3379 
g++ -headerpad_max_install_names -o finddialog.app/Contents/MacOS/finddialog finddialog.o moc_finddialog.o   -F/Library/Frameworks -L/Library/Frameworks -framework QtGui -framework Carbon -framework AppKit -framework QtCore -lz -lm -framework ApplicationServices
Live child 0x001161e0 (finddialog.app/Contents/MacOS/finddialog) PID 3380 
Undefined symbols:
  "_main", referenced from:
      __start in crt1.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
Reaping losing child 0x001161e0 PID 3380 
make: *** [finddialog.app/Contents/MacOS/finddialog] Error 1
Removing child 0x001161e0 PID 3380 from chain.

erpheus
Beiträge: 46
Registriert: 18. November 2008 11:55
Wohnort: Stuttgart

Beitrag von erpheus »

Code: Alles auswählen

connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(enableFindButton(<#const QString#> &)))
und

Code: Alles auswählen

void enableFindButton(const QString &text); 
passen nicht zusammen
und
<#const QString#> hab ich noch nie gesehen wenn das '#' Zeichen in C++ ne bedeutung hat würd ich es gern wissen.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Öhm... du hast schon in irgend einem deiner Source-Files ein int main( int argc, char** argv ) stehen?
Ich denke nicht, so würde ich jedenfalls die Meldung

Code: Alles auswählen

Undefined symbols:
  "_main", referenced from:
      __start in crt1.o
ld: symbol(s) not found 
deuten.
Strahlex
Beiträge: 158
Registriert: 23. Dezember 2008 15:49
Wohnort: Österreich

Beitrag von Strahlex »

Ich würde an deiner Stelle auch zuerst die C++ Basics lernen, gibt genug Tutorials dafür im Netz.
Kannst du irgentwelche anderen Programmiersprachen? Ich habe zum Beispiel ein Delphi zu C++ Tutorial gemacht und dann einfach mit der Qt Doku angefangen (Tutorial Abschnitt).
Antworten