Hi,ich wollte ein Programm übersetzen, das einen kleinen "Find" Dialog darstellt.
Wenn ichs aber mit qmake -project && qmake && make
übersetzen will, kommt die Meldung:
/usr/bin/ld: warning prebinding disabled because of undefined symbols
/usr/bin/ld: Undefined symbols:
___vt_10FindDialog
___vt_10FindDialog.12QPaintDevice
_findNext__10FindDialogRC7QStringb
_findPrev__10FindDialogRC7QStringb
_tr__10FindDialogPCcn1
make: *** [prog.app/Contents/MacOS/noch] Error 1
Hier der Quellcode (Habs aus nem Buch abgeschrieben):
//finddialog.cpp
#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)
{
setCaption(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);
}
void FindDialog::findClicked()
{
QString text = lineEdit->text();
bool caseSensitive = caseCheckBox->isOn();
if (backwardCheckBox->isOn())
emit findPrev(text, caseSensitive);
else
emit findNext(text, caseSensitive);
}
void FindDialog::enableFindButton(const QString&text)
{
findButton->setEnabled(!text.isEmpty());
}
// Finddialog.h
#ifndef FINDDIALOG_H
#define FINDDIALOG_H
#include <qdialog.h>
class QCheckBox;
class QLabel;
class QLineEdit;
class QPushButton;
class FindDialog ublic 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
//main.cpp
#include <qapplication.h>
#include"finddialog.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
FindDialog *dialog = new FindDialog;
app.setMainWidget(dialog);
dialog->show();
return app.exec();
}
schon mal danke im Vorraus...
Wenn ichs aber mit qmake -project && qmake && make
übersetzen will, kommt die Meldung:
/usr/bin/ld: warning prebinding disabled because of undefined symbols
/usr/bin/ld: Undefined symbols:
___vt_10FindDialog
___vt_10FindDialog.12QPaintDevice
_findNext__10FindDialogRC7QStringb
_findPrev__10FindDialogRC7QStringb
_tr__10FindDialogPCcn1
make: *** [prog.app/Contents/MacOS/noch] Error 1
Hier der Quellcode (Habs aus nem Buch abgeschrieben):
//finddialog.cpp
#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)
{
setCaption(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);
}
void FindDialog::findClicked()
{
QString text = lineEdit->text();
bool caseSensitive = caseCheckBox->isOn();
if (backwardCheckBox->isOn())
emit findPrev(text, caseSensitive);
else
emit findNext(text, caseSensitive);
}
void FindDialog::enableFindButton(const QString&text)
{
findButton->setEnabled(!text.isEmpty());
}
// Finddialog.h
#ifndef FINDDIALOG_H
#define FINDDIALOG_H
#include <qdialog.h>
class QCheckBox;
class QLabel;
class QLineEdit;
class QPushButton;
class FindDialog ublic 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
//main.cpp
#include <qapplication.h>
#include"finddialog.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
FindDialog *dialog = new FindDialog;
app.setMainWidget(dialog);
dialog->show();
return app.exec();
}
schon mal danke im Vorraus...