QT创建主窗口

来源:互联网 发布:java 量化 编辑:程序博客网 时间:2024/04/30 21:33

上次我们安装好了整个QT的环境,这次我们开始编写代码。程序呢都是现成的,从http://doc.qt.nokia.com/4.7/widgets-tutorial.html这里可以找到,都是官方的教程,例程,我只是拿来练练手。

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

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

[cpp:firstline[1]] view plaincopyprint?
  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. }  
 

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

[cpp:firstline[1]] view plaincopyprint?
  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. */  
 

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

[cpp:firstline[1]] view plaincopyprint?
  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++比较高级的类模板啥的,目前还没搞懂

[cpp:firstline[1]] view plaincopyprint?
  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