Errors while compiling a test program using Qt

I am new to C ++ / Qt

I follow the book "C ++ GUI Programming with Qt 4" by Jasmin Blanchette and Mark Summer.

I was working on an example program and was stuck with some compilation errors that I could not solve. Code and errors below. Any help is appreciated.

Thanks.

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

Errors below ..

c: /Qt/2010.02.1/qt/include/QtGui /../../ SRC / GUI / kernel /qwidget.h: In the function 'int qMain (int, char **)': c: / Qt / 2010.02.1 / qt / include / QtGui /../../ SRC / GUI / kernel /qwidget.h: 485: error: 'void QWidget :: show ()' is not available main.cpp: 7 : error: inside this context main.cpp: 7: error: "QWidget" is not an available database 'FindDialog'

+4
source share
1 answer

You must inherit publicly from QWidget or QDialog :

  class FindDialog : public QDialog { // ... 

show() actually implemented by FindDialog , QWidget - but you don’t inherit it publicly and, therefore, cannot access it.

Inheritance for classes is private by default, i.e.

 class A : B {}; 

and

 class A : private B {}; 

are equivalent.

+15
source

Source: https://habr.com/ru/post/1302151/


All Articles