QT菜鸟入门第一弹:简单的窗口


上次我们安装好了整个QT的环境,这次我们开始编写代码。程序呢都是现成的,从这里可以找到,都是官方的教程,例程,我只是拿来练练手。

在QT Creator里创建的是qt的空白工程,没有自动包含什么类的头文件之类的,目前只需要手动添加一个main.cpp就可以搞定一切了。

首先是一个最简单的窗口程序:

  1. #include <QtGui>   
  2. /*  
  3. 如果一个widget直接被创建,没有父控件,  
  4. 那么它将被当做一个窗口对待,或者顶层控件,在当它显示的时候  
  5. 因为它没有父对象来保证在他不被需要的时候能够删除,  
  6. 它需要开发者在应用程序中跟踪顶层控件  
  7. */  
  8. int main(int argc, char *argv[])   
  9. {   
  10.     QApplication app(argc, argv);   
  11.     QWidget window;   
  12.     window.resize(320, 240);/*设置窗口默认大小*/  
  13.     window.show();   
  14.     /*设置窗口标题*/  
  15.     window.setWindowTitle(QApplication::translate("toplevel","Top-level widget"));   
  16.     return app.exec();   
  17. }   

然后呢是一个稍微复杂点的,用到了一个按钮控件

  1. #include<QtGui>   
  2. int main(int argc, char *argv[])   
  3. {   
  4.     QApplication app(argc, argv);   
  5.     QWidget window;   
  6.     window.resize(320, 240); /*设置默认大小*/  
  7.     /*设置窗口标题*/  
  8.     window.setWindowTitle(QApplication::translate("childwidget","Child widget"));   
  9.     window.show();   
  10.     /*新建一个按钮,建立按钮的函数参数有几种,我们用的这种是  
  11.       提供按钮上显示的文本,指定其父对象的方式*/  
  12.     QPushButton *button = new QPushButton(QApplication::translate("childwidget","Press me"),&window);   
  13.     /*移动控件到指定位置,在它被显示之前就要发送这个移动信号*/  
  14.     button->move(100, 100);   
  15.     button->show();   
  16.     return app.exec();   
  17. }   
  18. /*  
  19. button是窗口的一个子控件,将会在窗口被删除的时候删除掉  
  20. 注意到,隐藏或者关闭这个窗口不会自动的销毁掉button,  
  21. 在程序退出的时候它才被销毁  
  22. */   

再然后呢,是一个更加复杂点的,用到了布局控件

  1. #include<QtGui>   
  2. /*  
  3. 通常窗口中的子控件是通过布局对象来安排位置的,  
  4. 而不是通过指定大小和移动来确定位置。  
  5. */  
  6. int main(int argc, char *argv[])   
  7. {   
  8.     QApplication app(argc, argv);   
  9.     QWidget window;   
  10.     /*新建一个标签*/  
  11.     QLabel *label = new QLabel(QApplication::translate("windowlayout","Name:"));   
  12.     /*新建一个行编辑器*/  
  13.     QLineEdit *lineEdit = new QLineEdit();   
  14.     /*新建一个水平布局对象*/  
  15.     QHBoxLayout *layout = new QHBoxLayout();   
  16.     /*  
  17.         把东西装进去  
  18.         通过addWidget()管理了控件的位置和大小  
  19.         布局控件自身对窗口提供了setLayout函数  
  20.     */  
  21.     layout->addWidget(label);   
  22.     layout->addWidget(lineEdit);   
  23.     window.setLayout(layout);   
  24.     window.setWindowTitle(QApplication::translate("windowlayout""Window layout"));   
  25.     window.show();   
  26.     return app.exec();   
  27. }   

最后是一个稍微长一点的,用到了C++比较高级的类模板啥的,目前还没搞懂

  1. #include <QtGui>   
  2. /*  
  3. 只有控件可以包含其他的控件,布局控件可以为控件们提供  
  4. 不同层次的分组。  
  5. 我们在这个程序里使用了两个布局控件  
  6. queryLayout是一个横向布局控件,包含了一个标签和一个行编辑控件  
  7. mainLayout是一个纵向布局控件,包含了queryLayout和一个QTableView  
  8. */  
  9. int main(int argc , char *argv[])   
  10. {   
  11.     QApplication app(argc, argv);   
  12.     QWidget window;   
  13.     QLabel *queryLabel = new QLabel(QApplication::translate("nestedlayouts","Query:"));   
  14.     QLineEdit *queryEdit = new QLineEdit();   
  15.     QTableView *resultView = new QTableView();   
  16.     QHBoxLayout *queryLayout = new QHBoxLayout();   
  17.     queryLayout->addWidget(queryLabel);   
  18.     queryLayout->addWidget(queryEdit);   
  19.     QVBoxLayout *mainLayout = new QVBoxLayout();   
  20.     /*  
  21.         调用mainLayout的addLayout来放置queryLayout  
  22.     */  
  23.     mainLayout->addLayout(queryLayout);   
  24.     mainLayout->addWidget(resultView);   
  25.     window.setLayout(mainLayout);   
  26.     // Set up the model and configure the view...   
  27.     /*QStandardItemModel类提供一个通用的模型,为存储数据*/  
  28.     QStandardItemModel model;   
  29.     /*设置横向的表头,用标签*/  
  30.     model.setHorizontalHeaderLabels(   
  31.             QStringList() <<QApplication::translate("nestedlayouts""Name")   
  32.             <<QApplication::translate("nestedlayouts","Office"));   
  33.     QList<QStringList> rows = QList<QStringList>()   
  34.                               << (QStringList() << "Verne Nilsen" << "123")   
  35.                               << (QStringList() << "Carlos Tang" << "77")   
  36.                               << (QStringList() << "Bronwyn Hawcroft" << "119")   
  37.                               << (QStringList() << "Alessandro Hanssen" << "32")   
  38.                               << (QStringList() << "Andrew John Bakken" << "54")   
  39.                               << (QStringList() << "Vanessa Weatherley" << "85")   
  40.                               << (QStringList() << "Rebecca Dickens" << "17")   
  41.                               << (QStringList() << "David Bradley" << "42")   
  42.                               << (QStringList() << "Knut Walters" << "25")   
  43.                               << (QStringList() << "Andrea Jones" << "34");   
  44.     foreach(QStringList row, rows) {   
  45.         QList<QStandardItem*> items;   
  46.         foreach(QString text, row)   
  47.             items.append(new QStandardItem(text));   
  48.         model.appendRow(items);   
  49.     }   
  50.     /*以上我们遇到了2个很强大的东西:一个是Qlist<>,另一个是QStringList(),这里略过,解释另开一章*/  
  51.     resultView->setModel(&model);   
  52.     resultView->verticalHeader()->hide();   
  53.     resultView->horizontalHeader()->setStretchLastSection(true);   
  54.     window.setWindowTitle(   
  55.             QApplication::translate("nestedlayouts""Nested layouts")   
  56.             );   
  57.     window.show();   
  58.     return app.exec();   
  59. }  

上面的程序,简单的描述了简单的QT程序怎么写,跟GTK差不多,不过GTK是C写的。

一些C++的语言特性,我还不是很知道,需要查查C++的书。

这x

相关内容