打开QT Creator,新建⼀个“应⽤程序-Qt Widgets Application”项⽬:输⼊名称scdc之后点击下⼀步。
在“构建套件”这个页⾯中直接点出下⼀步,然后再输⼊⾃⼰的类名DataCenter,其它不⽤⼿动改过来,QT会⾃动修改,如下图所⽰:再点下⼀步,完成即可了。
这个时候直接点击左下⽅的“运⾏”按键,窗体就会出现了。先看⼀看项⽬列表中所列的⽂件这些⽂件分别是:
1. datacenter.h2. datacenter.cpp3. main.cpp
4. datacenter.ui 界⾯设计⽂件
5. ui_datacenter.h 这个⽂件没有在左边的列表中,⽽是被datacenter.cpp所包含。
main.cpp
#include \"datacenter.h\"#include QApplication a(argc, argv); DataCenter w; w.show(); return a.exec();} ⾸先来到的是main.cpp这个⽂件,因为这⼉有⼀个main函数。对于⼀般的C/C++应⽤程序来说,main就是程序的起点。所以我们从这⾥开始分析。 QApplication a(argc, argv);这⼀句的含义是实例化⼀个QApplication类,类的名字是a,传过去的参数则为argc和argv。我们知道,argc是参数的个数,⽽argv是各个参数的指针(双重指针)。官⽅的⽂档是这样写的: The QApplication class manages the GUI application's control flow and main settings. QApplication contains the main event loop, where all events from the window system and other sources are processed and dispatched. It also handles the application's initialization, finalization, and provides session management. In addition, Q For any GUI application using Qt, there is precisely one QApplication object, no matter whether the application has 0, 1, 2 or more windows at any given time. For non-GUI Qt applications, use QCoreApplication instead, as it does not depend o The QApplication object is accessible through the instance() function that returns a pointer equivalent to the global qApp pointer. DataCenter w;实例化⼀个DataCenter类,类的名字是w。DataCenter类是继承⾃QMainWindow,我们去了解⼀下QMainWindow类。QMainWindow类提供⼀个有菜单条、锚接窗⼝(例如⼯具条)和⼀个状态条的主应⽤程序窗⼝。 主窗⼝通常⽤在提供⼀个⼤的窗⼝部件(例如⽂本编辑或者绘制画布)以及周围菜单、⼯具条和⼀个状态条。QMainWindow常常被继承,因为这使得封装部件、菜单和⼯具条以及窗⼝状态变得更容易。继承使创建当⽤户点击菜单项或者⼯具条按钮时被调⽤的槽成为可能。你也可以使⽤Qt设计器来创建主窗⼝。 w.show();显⽰这个窗⼝部件和它的⼦窗⼝部件。 return a.exec(); 程序进⼊消息循环,等待可能输⼊进⾏响应。这⾥main()把控制权转交给Qt,Qt完成事件处理⼯作,当应⽤程序退出的时候exec()的值就会返回。在exec()中,Qt接受并处理⽤户和系统的事件并且把它们传递给适当的窗⼝部件。 因为这是⼀个QApplication类型的程序,所以⼀般情况下不需要向控制台窗⼝打印信息,如果需要的话请使⽤system命令: #include \"datacenter-import.h\"#include DataCenterImport::DataCenterImport(){ system(\"echo Hello, Merlin\");} 为什么不是cout来打印? 暂时不⼗分清楚,我想就是因为它是界⾯应⽤程序吧,⽽cout是⽤于控制台程序的。若使⽤cout则需要界⾯退出之后才会将要打印的字符打印到控制台中来。另外⼀种⽅法更值得推荐,使⽤qDebug: ⾸先要添加头⽂件#include 然后在要输出调试信息到控制台时加上这⼀⾏就⾏了:qDebug(\"Test:::%d\", 243); 效果是这样⼦的,是不是很合适? datacenter.h #ifndef DATACENTER_H#define DATACENTER_H#include class DataCenter : public QMainWindow{ Q_OBJECT public: explicit DataCenter(QWidget *parent = 0); ~DataCenter();private: Ui::DataCenter *ui;}; #endif // DATACENTER_H datacenter.cpp #include \"datacenter.h\"#include \"ui_datacenter.h\" DataCenter::DataCenter(QWidget *parent) : QMainWindow(parent), ui(new Ui::DataCenter){ ui->setupUi(this);} DataCenter::~DataCenter(){ delete ui;} 与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟⼀系列以逗号分隔的初始化字段。上⾯的QMainWindow(parent)和ui(new Ui::DataCenter)就是初始化列表。 ui_datacenter.h /********************************************************************************** Form generated from reading UI file 'datacenter.ui'** ** Created by: Qt User Interface Compiler version 5.2.0** ** WARNING! All changes made in this file will be lost when recompiling UI file!********************************************************************************/#ifndef UI_DATACENTER_H#define UI_DATACENTER_H#include #include public: QAction *actionLicense; QAction *actionAbout; QAction *actionNew; QAction *actionOpen; QAction *actionSave; QAction *actionSave_as; QAction *actionTemp_list; QAction *actionExit; QWidget *centralWidget; QPushButton *pushButton; QTextBrowser *textBrowser; QMenuBar *menuBar; QMenu *File; QMenu *View; QMenu *Tool; QMenu *About; QToolBar *mainToolBar; QStatusBar *statusBar; void setupUi(QMainWindow *DataCenter) { if (DataCenter->objectName().isEmpty()) DataCenter->setObjectName(QStringLiteral(\"DataCenter\")); DataCenter->resize(800, 600); QIcon icon; icon.addFile(QStringLiteral(\":/res/scdc.ico\"), QSize(), QIcon::Normal, QIcon::Off); DataCenter->setWindowIcon(icon); actionLicense = new QAction(DataCenter); actionLicense->setObjectName(QStringLiteral(\"actionLicense\")); actionLicense->setIcon(icon); actionAbout = new QAction(DataCenter); actionAbout->setObjectName(QStringLiteral(\"actionAbout\")); actionNew = new QAction(DataCenter); actionNew->setObjectName(QStringLiteral(\"actionNew\")); actionOpen = new QAction(DataCenter); actionOpen->setObjectName(QStringLiteral(\"actionOpen\")); actionSave = new QAction(DataCenter); actionSave->setObjectName(QStringLiteral(\"actionSave\")); actionSave_as = new QAction(DataCenter); actionSave_as->setObjectName(QStringLiteral(\"actionSave_as\")); actionTemp_list = new QAction(DataCenter); actionTemp_list->setObjectName(QStringLiteral(\"actionTemp_list\")); actionExit = new QAction(DataCenter); actionExit->setObjectName(QStringLiteral(\"actionExit\")); centralWidget = new QWidget(DataCenter); centralWidget->setObjectName(QStringLiteral(\"centralWidget\")); pushButton = new QPushButton(centralWidget); pushButton->setObjectName(QStringLiteral(\"pushButton\")); pushButton->setGeometry(QRect(60, 100, 75, 23)); textBrowser = new QTextBrowser(centralWidget); textBrowser->setObjectName(QStringLiteral(\"textBrowser\")); textBrowser->setGeometry(QRect(300, 110, 441, 381)); DataCenter->setCentralWidget(centralWidget); menuBar = new QMenuBar(DataCenter); menuBar->setObjectName(QStringLiteral(\"menuBar\")); menuBar->setGeometry(QRect(0, 0, 800, 23)); File = new QMenu(menuBar); File->setObjectName(QStringLiteral(\"File\")); View = new QMenu(menuBar); View->setObjectName(QStringLiteral(\"View\")); Tool = new QMenu(menuBar); Tool->setObjectName(QStringLiteral(\"Tool\")); About = new QMenu(menuBar); About->setObjectName(QStringLiteral(\"About\")); DataCenter->setMenuBar(menuBar); mainToolBar = new QToolBar(DataCenter); mainToolBar->setObjectName(QStringLiteral(\"mainToolBar\")); mainToolBar->setMovable(false); DataCenter->addToolBar(Qt::TopToolBarArea, mainToolBar); DataCenter->insertToolBarBreak(mainToolBar); statusBar = new QStatusBar(DataCenter); statusBar->setObjectName(QStringLiteral(\"statusBar\")); DataCenter->setStatusBar(statusBar); menuBar->addAction(File->menuAction()); menuBar->addAction(View->menuAction()); menuBar->addAction(Tool->menuAction()); menuBar->addAction(About->menuAction()); File->addAction(actionNew); File->addAction(actionOpen); File->addAction(actionSave); File->addAction(actionSave_as); File->addSeparator(); File->addAction(actionTemp_list); File->addSeparator(); File->addAction(actionExit); About->addAction(actionLicense); About->addAction(actionAbout); retranslateUi(DataCenter); QMetaObject::connectSlotsByName(DataCenter); } // setupUi void retranslateUi(QMainWindow *DataCenter) { DataCenter->setWindowTitle(QApplication::translate(\"DataCenter\", \"DataCenter - Copyright 2012-2014 senscom\", 0)); actionLicense->setText(QApplication::translate(\"DataCenter\", \"\\350\\256\\270\\345\\217\\257\", 0)); actionAbout->setText(QApplication::translate(\"DataCenter\", \"\\345\\205\\263\\344\\272\\216\", 0)); actionNew->setText(QApplication::translate(\"DataCenter\", \"New\", 0)); actionOpen->setText(QApplication::translate(\"DataCenter\", \"Open\", 0)); actionSave->setText(QApplication::translate(\"DataCenter\", \"Save\", 0)); actionSave_as->setText(QApplication::translate(\"DataCenter\", \"Save as...\", 0)); actionTemp_list->setText(QApplication::translate(\"DataCenter\", \"temp list....\", 0)); actionExit->setText(QApplication::translate(\"DataCenter\", \"Exit\", 0)); pushButton->setText(QApplication::translate(\"DataCenter\", \"PushButton\", 0)); File->setTitle(QApplication::translate(\"DataCenter\", \"\\346\\226\\207\\344\\273\\266\", 0)); View->setTitle(QApplication::translate(\"DataCenter\", \"\\346\\237\\245\\347\\234\\213\", 0)); Tool->setTitle(QApplication::translate(\"DataCenter\", \"\\345\\267\\245\\345\\205\\267\", 0)); About->setTitle(QApplication::translate(\"DataCenter\", \"\\345\\205\\263\\344\\272\\216\", 0)); } // retranslateUi}; namespace Ui { class DataCenter: public Ui_DataCenter {};} // namespace UiQT_END_NAMESPACE#endif // UI_DATACENTER_H 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务