2010-02-23 3 views
4

Je suis assez nouveau pour C++/Qterreurs lors de la compilation d'un programme de test en utilisant Qt

Je suivais le livre 'C++ Programmation GUI avec Qt 4' par Jasmin Blanchette et Mark Summer champ. Je travaillais sur un exemple de programme et je me suis retrouvé coincé avec quelques erreurs de compilation que je n'ai pas réussi à résoudre. Code et erreurs ci-dessous. Toute aide est appréciée.

Merci.

finddialog.h

#ifndef FINDDIALOG_H 
#define FINDDIALOG_H 

#include <QDialog> 

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

class FindDialog : QDialog 
{ 
    Q_OBJECT 
public: 
    FindDialog(QWidget *parent = 0); 
signals: 
    void findNext(const QString &str, Qt::CaseSensitivity cs); 
    void findPrevious(const QString &str, Qt::CaseSensitivity cs); 
private slots: 
    void findClicked(); 
    void enableFindButton(const QString &text); 
private: 
    QLabel *label; 
    QLineEdit *lineEdit; 
    QCheckBox *caseCheckBox; 
    QCheckBox *backwardCheckBox; 
    QPushButton *findButton; 
    QPushButton *closeButton; 
}; 

#endif // FINDDIALOG_H 

finddialog.cpp

#include <QtGui> 

#include "finddialog.h" 

FindDialog::FindDialog(QWidget *parent) : QDialog(parent) 
{ 
    label = new QLabel(tr("Find &what:")); 
    lineEdit = new QLineEdit; 
    label->setBuddy(lineEdit); 

    caseCheckBox = new QCheckBox(tr("Match &case")); 
    backwardCheckBox = new QCheckBox(tr("Search &backward")); 

    findButton = new QPushButton(tr("&Find")); 
    findButton->setDefault(true); 
    findButton->setEnabled(false); 

    closeButton = new QPushButton(tr("Close")); 

    connect(lineEdit, SIGNAL(textChanged(QString)), this, SLOT(enableFindButton(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(); 

    QHBoxLayout *mainLayout = new QHBoxLayout; 
    mainLayout->addLayout(leftLayout); 
    mainLayout->addLayout(rightLayout); 
    setLayout(mainLayout); 

    setWindowTitle(tr("Find")); 
    setFixedHeight(sizeHint().height()); 
} 

void FindDialog::findClicked() 
{ 
    QString text = lineEdit->text(); 
    Qt::CaseSensitivity cs = 
      caseCheckBox->isChecked() ? Qt::CaseSensitive 
       : Qt::CaseInsensitive; 
    if (backwardCheckBox->isChecked()) { 
     emit findPrevious(text, cs); 
    } else { 
     emit findNext(text, cs); 
    } 
} 

void FindDialog::enableFindButton(const QString &text) 
{ 
    findButton->setEnabled(!text.isEmpty()); 
} 

main.cpp

#include <QApplication> 
#include "finddialog.h" 
int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    FindDialog *dialog = new FindDialog; 
    dialog->show(); 
    return app.exec(); 
} 

erreurs ci-dessous ..

c:/Qt/2010.02.1/qt/include/QtGui/../../src/gui/kernel/qwidget.h: In function 'int qMain(int, char**)': c:/Qt/2010.02.1/qt/include/QtGui/../../src/gui/kernel/qwidget.h:485: error: 'void QWidget::show()' is inaccessible main.cpp:7: error: within this context main.cpp:7: error: 'QWidget' is not an accessible base of 'FindDialog'

Répondre

15

Vous devez hériter de QWidget ou publiquement QDialog:

class FindDialog : public QDialog { 
     // ... 

show() est effectivement mis en œuvre par une base de FindDialog, QWidget - mais vous n'êtes pas Héritant et publiquement de ne peut donc pas y accéder.

héritage pour les classes est par défaut privée, à savoir

class A : B {}; 

et

class A : private B {}; 

sont équivalentes.

+0

@gf Merci .. Je pense que .. mon mauvais .. – bdhar

Questions connexes