doforumda
27th August 2010, 11:58
hi
i am following "The Book Of Qt 4 The art of Building Qt Applications" and trying the following example which converts byte to decimal, hexadecimal and binary but when i run, it produces error
here is the code
byteconverterdialog.h file
#ifndef BYTECONVERTERDIALOG_H
#define BYTECONVERTERDIALOG_H
#include <QDialog>
class byteConverterDialog : public QDialog
{
Q_OBJECT
public:
byteConverterDialog();
};
#endif // BYTECONVERTERDIALOG_H
byteconverter.h
#ifndef BYTECONVERTER_H
#define BYTECONVERTER_H
#include <QObject>
class ByteConverter : public QObject
{
Q_OBJECT
public:
ByteConverter(QObject* = 0);
public slots:
void setDec(const QString &);
void setHex(const QString &);
void setBin(const QString &);
signals:
void decChanged(const QString&);
void hexChanged(const QString&);
void binChanged(const QString&);
};
#endif // BYTECONVERTER_H
byteconverterdialog.cpp
#include "byteconverterdialog.h"
#include "byteconverter.h"
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QIntValidator>
byteConverterDialog::byteConverterDialog()
{
//generate the necessary layouts
QVBoxLayout *mainLayout = new QVBoxLayout(this);
QGridLayout *editLayout = new QGridLayout;
QHBoxLayout *buttonLayout = new QHBoxLayout;
mainLayout->addLayout(editLayout);
mainLayout->addStretch();
mainLayout->addLayout(buttonLayout);
//generate the labels and line-edits and add them to the object pointed at by editLayout
QLabel *decLabel = new QLabel(tr("Decimal"));
QLabel *hexLabel = new QLabel(tr("hexadecimal"));
QLabel *binLabel = new QLabel(tr("Binary"));
decEdit = new QLineEdit;
hexEdit = new QLineEdit;
binEdit = new QLineEdit;
editLayout->addWidget(decLabel, 0, 0);
editLayout->addWidget(decEdit, 0, 1);
editLayout->addWidget(hexLabel, 1, 0);
editLayout->addWidget(hexEdit, 1, 1);
editLayout->addWidget(binLabel, 2, 0);
editLayout->addWidget(binEdit, 2, 1);
//create the quit button and add it to the object pointed at by buttonLayout.
QPushButton *exitButton = new QPushButton(tr("Quit"));
buttonLayout->addStretch();
buttonLayout->addWidget(exitButton);
exitButton->setDefault(true);
QIntValidator* decValidator =
new QIntValidator(0, 255, decEdit);
decEdit->setValidator(decValidator);
QRegExpValidator* hexValidator =
new QRegExpValidator(QRegExp("[0-9A-Fa-f]{1,2}"), hexEdit);
hexEdit->setValidator(hexValidator);
QRegExpValidator* binValidator =
new QRegExpValidator(QRegExp("[01]{1,8}"), binEdit);
binEdit->setValidator(binValidator);
setWindowTitle(tr("Byte Converter"));
connect(exitButton, SIGNAL(clicked()), this, SLOT(accept()));
ByteConverter* bc = new ByteConverter(this);
connect(decEdit, SIGNAL(textChanged(const QString &)), bc, SLOT(setDec(const QString &)));
connect(hexEdit, SIGNAL(textChanged(const QString &)), bc, SLOT(setHex(const QString &)));
connect(binEdit, SIGNAL(textChanged(const QString &)), bc, SLOT(setBin(const QString &)));
connect(bc, SIGNAL(decChanged(const QString&)), decEdit, SLOT(setText(const QString&)));
connect(bc, SIGNAL(hexChanged(const QString&)), hexEdit, SLOT(setText(const QString&)));
connect(bc, SIGNAL(binChanged(const QString&)), binEdit, SLOT(setText(const QString&)));
}
void byteConverterDialog::decChanged(const QString& newValue)
{
bool ok;
int num = newValue.toInt(&ok);
if(ok) {
hexEdit->setText(QString::number(num, 16));
binEdit->setText(QString::number(num, 2));
}
else {
hexEdit->setText("");
binEdit->setText("");
}
}
void byteConverterDialog::hexChanged(const QString& newValue)
{
bool ok;
int num = newValue.toInt(&ok);
if(ok) {
decEdit->setText(QString::number(num));
binEdit->setText(QString::number(num, 2));
}
else {
decEdit->setText("");
binEdit->setText("");
}
}
void byteConverterDialog::binChanged(const QString& newValue)
{
bool ok;
int num = newValue.toInt(&ok);
if(ok) {
decEdit->setText(QString::number(num));
hexEdit->setText(QString::number(num, 16));
}
else {
hexEdit->setText("");
decEdit->setText("");
}
}
byteconverter.cpp
#include "byteconverter.h"
ByteConverter::ByteConverter(QObject* parent) : QObject(parent)
{
}
void ByteConverter::setDec(const QString& newValue)
{
bool ok;
int num = newValue.toInt(&ok);
if(ok) {
emit hexChanged(QString::number(num, 16));
emit binChanged(QString::number(num, 2));
}
else {
emit hexChanged("");
emit binChanged("");
}
}
void ByteConverter::setHex(const QString& newValue)
{
bool ok;
int num = newValue.toInt(&ok, 16);
if(ok) {
emit decChanged(QString::number(num));
emit binChanged(QString::number(num, 2));
}
else {
emit decChanged("");
emit binChanged("");
}
}
void ByteConverter::setBin(const QString& newValue)
{
bool ok;
int num = newValue.toInt(&ok, 2);
if(ok) {
emit decChanged(QString::number(num));
emit hexChanged(QString::number(num, 16));
}
else {
emit decChanged("");
emit hexChanged("");
}
}
main.cpp
#include <QtGui/QApplication>
#include "byteconverterdialog.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
byteConverterDialog bc;
bc.setAttribute(Qt::WA_QuitOnClose);
bc.show();
return a.exec();
}
when i run this code, it displays these errors
decEdit was not declared in this scope byteconverterdialog.cpp 27
hexEdit was not declared in this scope byteconverterdialog.cpp 28
binEdit was not declared in this scope byteconverterdialog.cpp 29
void byteConverterDialog::decChanged(const QString&) member function declared in class byteConverterDialog byteconverterdialog.cpp 70
void byteConverterDialog::hexChanged(const QString&) member function declared in class byteConverterDialog byteconverterdialog.cpp 84
void byteConverterDialog::binChanged(const QString&) member function declared in class byteConverterDialog byteconverterdialog.cpp 98
i am following "The Book Of Qt 4 The art of Building Qt Applications" and trying the following example which converts byte to decimal, hexadecimal and binary but when i run, it produces error
here is the code
byteconverterdialog.h file
#ifndef BYTECONVERTERDIALOG_H
#define BYTECONVERTERDIALOG_H
#include <QDialog>
class byteConverterDialog : public QDialog
{
Q_OBJECT
public:
byteConverterDialog();
};
#endif // BYTECONVERTERDIALOG_H
byteconverter.h
#ifndef BYTECONVERTER_H
#define BYTECONVERTER_H
#include <QObject>
class ByteConverter : public QObject
{
Q_OBJECT
public:
ByteConverter(QObject* = 0);
public slots:
void setDec(const QString &);
void setHex(const QString &);
void setBin(const QString &);
signals:
void decChanged(const QString&);
void hexChanged(const QString&);
void binChanged(const QString&);
};
#endif // BYTECONVERTER_H
byteconverterdialog.cpp
#include "byteconverterdialog.h"
#include "byteconverter.h"
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QIntValidator>
byteConverterDialog::byteConverterDialog()
{
//generate the necessary layouts
QVBoxLayout *mainLayout = new QVBoxLayout(this);
QGridLayout *editLayout = new QGridLayout;
QHBoxLayout *buttonLayout = new QHBoxLayout;
mainLayout->addLayout(editLayout);
mainLayout->addStretch();
mainLayout->addLayout(buttonLayout);
//generate the labels and line-edits and add them to the object pointed at by editLayout
QLabel *decLabel = new QLabel(tr("Decimal"));
QLabel *hexLabel = new QLabel(tr("hexadecimal"));
QLabel *binLabel = new QLabel(tr("Binary"));
decEdit = new QLineEdit;
hexEdit = new QLineEdit;
binEdit = new QLineEdit;
editLayout->addWidget(decLabel, 0, 0);
editLayout->addWidget(decEdit, 0, 1);
editLayout->addWidget(hexLabel, 1, 0);
editLayout->addWidget(hexEdit, 1, 1);
editLayout->addWidget(binLabel, 2, 0);
editLayout->addWidget(binEdit, 2, 1);
//create the quit button and add it to the object pointed at by buttonLayout.
QPushButton *exitButton = new QPushButton(tr("Quit"));
buttonLayout->addStretch();
buttonLayout->addWidget(exitButton);
exitButton->setDefault(true);
QIntValidator* decValidator =
new QIntValidator(0, 255, decEdit);
decEdit->setValidator(decValidator);
QRegExpValidator* hexValidator =
new QRegExpValidator(QRegExp("[0-9A-Fa-f]{1,2}"), hexEdit);
hexEdit->setValidator(hexValidator);
QRegExpValidator* binValidator =
new QRegExpValidator(QRegExp("[01]{1,8}"), binEdit);
binEdit->setValidator(binValidator);
setWindowTitle(tr("Byte Converter"));
connect(exitButton, SIGNAL(clicked()), this, SLOT(accept()));
ByteConverter* bc = new ByteConverter(this);
connect(decEdit, SIGNAL(textChanged(const QString &)), bc, SLOT(setDec(const QString &)));
connect(hexEdit, SIGNAL(textChanged(const QString &)), bc, SLOT(setHex(const QString &)));
connect(binEdit, SIGNAL(textChanged(const QString &)), bc, SLOT(setBin(const QString &)));
connect(bc, SIGNAL(decChanged(const QString&)), decEdit, SLOT(setText(const QString&)));
connect(bc, SIGNAL(hexChanged(const QString&)), hexEdit, SLOT(setText(const QString&)));
connect(bc, SIGNAL(binChanged(const QString&)), binEdit, SLOT(setText(const QString&)));
}
void byteConverterDialog::decChanged(const QString& newValue)
{
bool ok;
int num = newValue.toInt(&ok);
if(ok) {
hexEdit->setText(QString::number(num, 16));
binEdit->setText(QString::number(num, 2));
}
else {
hexEdit->setText("");
binEdit->setText("");
}
}
void byteConverterDialog::hexChanged(const QString& newValue)
{
bool ok;
int num = newValue.toInt(&ok);
if(ok) {
decEdit->setText(QString::number(num));
binEdit->setText(QString::number(num, 2));
}
else {
decEdit->setText("");
binEdit->setText("");
}
}
void byteConverterDialog::binChanged(const QString& newValue)
{
bool ok;
int num = newValue.toInt(&ok);
if(ok) {
decEdit->setText(QString::number(num));
hexEdit->setText(QString::number(num, 16));
}
else {
hexEdit->setText("");
decEdit->setText("");
}
}
byteconverter.cpp
#include "byteconverter.h"
ByteConverter::ByteConverter(QObject* parent) : QObject(parent)
{
}
void ByteConverter::setDec(const QString& newValue)
{
bool ok;
int num = newValue.toInt(&ok);
if(ok) {
emit hexChanged(QString::number(num, 16));
emit binChanged(QString::number(num, 2));
}
else {
emit hexChanged("");
emit binChanged("");
}
}
void ByteConverter::setHex(const QString& newValue)
{
bool ok;
int num = newValue.toInt(&ok, 16);
if(ok) {
emit decChanged(QString::number(num));
emit binChanged(QString::number(num, 2));
}
else {
emit decChanged("");
emit binChanged("");
}
}
void ByteConverter::setBin(const QString& newValue)
{
bool ok;
int num = newValue.toInt(&ok, 2);
if(ok) {
emit decChanged(QString::number(num));
emit hexChanged(QString::number(num, 16));
}
else {
emit decChanged("");
emit hexChanged("");
}
}
main.cpp
#include <QtGui/QApplication>
#include "byteconverterdialog.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
byteConverterDialog bc;
bc.setAttribute(Qt::WA_QuitOnClose);
bc.show();
return a.exec();
}
when i run this code, it displays these errors
decEdit was not declared in this scope byteconverterdialog.cpp 27
hexEdit was not declared in this scope byteconverterdialog.cpp 28
binEdit was not declared in this scope byteconverterdialog.cpp 29
void byteConverterDialog::decChanged(const QString&) member function declared in class byteConverterDialog byteconverterdialog.cpp 70
void byteConverterDialog::hexChanged(const QString&) member function declared in class byteConverterDialog byteconverterdialog.cpp 84
void byteConverterDialog::binChanged(const QString&) member function declared in class byteConverterDialog byteconverterdialog.cpp 98