在网上阅读了QT入门教程系列文章,感谢豆豆博客的版主,把这么好的教程和大家分享,本文是对入门教程的笔记,以期抛砖引玉,听到大家的好见解。 希望大家更好更快的学习QT,达到自己的目标,实现自己的理想。

      本文分析QT项目的结构,如头文件中代码的结构与功效,主源代码文件的结构与功效。也就是说头文件中应该放些什么,源代码文件中放些什么。

      先看一个经典的例子,头文件:

  1. #ifndef FINDDIALOG_H 
  2. #define FINDDIALOG_H 
  3.  
  4. #include <QtGui/QDialog> 
  5.  
  6. class QCheckBox; 
  7. class QLabel; 
  8. class QLineEdit; 
  9. class QPushButton; 
  10.  
  11. class FindDialog : public QDialog 
  12.         Q_OBJECT 
  13.  
  14. public: 
  15.         FindDialog(QWidget *parent &#61; 0); 
  16.         ~FindDialog(); 
  17. signals: 
  18.         void findNext(const QString &str, Qt::CaseSensitivity cs); 
  19.         void findPrevious(const QString &str, Qt::CaseSensitivity cs); 
  20. private slots: 
  21.         void findClicked(); 
  22.         void enableFindButton(const QString &text); 
  23. private: 
  24.         QLabel *label; 
  25.         QLineEdit *lineEdit; 
  26.         QCheckBox *caseCheckBox; 
  27.         QCheckBox *backwardCheckBox; 
  28.         QPushButton *findButton; 
  29.         QPushButton *closeButton; 
  30. }; 
  31.  
  32. #endif // FINDDIALOG_H 

      主函数&#xff1a;

  1. #include <QApplication> 
  2.  
  3. #include "finddialog.h" 
  4.  
  5. int main(int argc, char *argv[]) 
  6.         QApplication app(argc, argv); 
  7.         FindDialog *dialog &#61; new FindDialog; 
  8.         dialog->show(); 
  9.         return app.exec(); 

     主源代码函数&#xff1a;

 

  1. #include <QtGui> 
  2. #include "finddialog.h" 
  3.  
  4. FindDialog::FindDialog(QWidget *parent) 
  5.         : QDialog(parent) 
  6.         label &#61; new QLabel(tr("Find &what:")); 
  7.         lineEdit &#61; new QLineEdit; 
  8.         label->setBuddy(lineEdit); 
  9.  
  10.         caseCheckBox &#61; new QCheckBox(tr("Match &case")); 
  11.         backwardCheckBox &#61; new QCheckBox(tr("Search &backford")); 
  12.  
  13.         findButton &#61; new QPushButton(tr("&Find")); 
  14.         findButton->setDefault(true); 
  15.         findButton->setEnabled(false); 
  16.  
  17.         closeButton &#61; new QPushButton(tr("Close")); 
  18.  
  19.         connect(lineEdit, SIGNAL(textChanged(const QString&)), this, SLOT(enableFindButton(const QString&))); 
  20.         connect(findButton, SIGNAL(clicked()), this, SLOT(findClicked())); 
  21.         connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); 
  22.  
  23.         QHBoxLayout *topLeftLayout &#61; new QHBoxLayout; 
  24.         topLeftLayout->addWidget(label); 
  25.         topLeftLayout->addWidget(lineEdit); 
  26.  
  27.         QVBoxLayout *leftLayout &#61; new QVBoxLayout; 
  28.         leftLayout->addLayout(topLeftLayout); 
  29.         leftLayout->addWidget(caseCheckBox); 
  30.         leftLayout->addWidget(backwardCheckBox); 
  31.  
  32.         QVBoxLayout *rightLayout &#61; new QVBoxLayout; 
  33.         rightLayout->addWidget(findButton); 
  34.         rightLayout->addWidget(closeButton); 
  35.         rightLayout->addStretch(); 
  36.  
  37.         QHBoxLayout *mainLayout &#61; new QHBoxLayout; 
  38.         mainLayout->addLayout(leftLayout); 
  39.         mainLayout->addLayout(rightLayout); 
  40.         setLayout(mainLayout); 
  41.  
  42.         setWindowTitle(tr("Find")); 
  43.         setFixedHeight(sizeHint().height()); 
  44.  
  45. FindDialog::~FindDialog() 
  46.  
  47.  
  48. void FindDialog::findClicked() 
  49.         QString text &#61; lineEdit->text(); 
  50.         Qt::CaseSensitivity cs &#61; caseCheckBox->isChecked() ? Qt::CaseInsensitive : Qt::CaseSensitive; 
  51.         if(backwardCheckBox->isChecked()) { 
  52.                 emit findPrevious(text, cs); 
  53.         } else { 
  54.                 emit findNext(text, cs); 
  55.         } 
  56.  
  57. void FindDialog::enableFindButton(const QString &text) 
  58.         findButton->setEnabled(!text.isEmpty()); 
  59. }  

程序的运行结果是这样的&#xff1a;

asd