网站开发团队简介,腾讯云域名优惠,广州短视频拍摄公司,软装在桌面开发中#xff0c;总的来说#xff0c;包含两种类型的应用程序#xff1a;无界面的Console程序和有界面的GUI程序。Qt也不例外#xff0c;包含Qt Console Application和Qt GUI Application。一、Qt Console Application在VS2015中创建一个Qt Console Application总的来说包含两种类型的应用程序无界面的Console程序和有界面的GUI程序。Qt也不例外包含Qt Console Application和Qt GUI Application。一、Qt Console Application在VS2015中创建一个Qt Console Application默认会生成一个main.cpp源文件代码如下#include QtCore/QCoreApplication
#include iostream   //自行添加int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);//如果要打印Hello Qt直接采用C中的cout对象即可std::cout  Hello Qt  std::endl;return a.exec();   //开始主线程事件循环
}12345678910解析在main函数中主要创建了一个QCoreApplication类的对象然后执行了这个对象的exec操作。 QCoreApplication类继承自QObject而QObject类是Qt中最基本的类所有类的基类。 QCoreApplication这个类是整个应用程序的核心用于程序的初始化生成事件循环程序退出等一系列动作。二、Qt GUI Application三种主窗体Qt有三种类型的主窗体QDialog QWidget QMainWindow。QWidget QWidget类是所有用户界面对象的基类其中QDialog和QMainWindow继承自它。 它有以下的特点Widget是用户界面的基本单元它从窗口系统接收鼠标键盘和其他事件并在屏幕上绘制自己, 最常见的就是控件按钮、编辑框等;每个Widget都是矩形的它们按照Z-order进行排序;QDialog QDialog类是对话框窗口的基类。一般作为顶级窗口没有父窗口的窗口称为顶级窗口与用户交互。 常见的对话框窗口有文件选择窗口、颜色和字体选择窗口等。QMainWindow 提供一个有中心部件菜单条、锚接窗口例如工具条和一个状态条的主应用程序窗口。锚接部件 1. 锚接部件一般多为一个容器来使用以包容其他窗口部件来实现功能 2. 对于一个标准的Qt主窗口而言锚接部件并不是必须的 3. 锚接部件可以作为一个窗口浮动在主窗口的上面也可以像工具栏一样停靠在主窗口的上、下、左、右4个方向 4. 一个主窗口可以包含多个锚接部件。 中心部件 1. 主窗口的中心一个主窗口只有一个中心部件。主窗口有自己的布局管理器因此不能再给主窗口设置布局但是可以给中心部件设置布局。创建界面的三种方法手工设计界面 使用手工创建代码时需要从Qt已有的GUI类库中选择一个类作为基类继承并且添加必要的其它成员。通常我们会选择从QDialog、 QWidget、QMainWindow等类中选择一个作为主窗体然后创建其它的控件并使用布局管理器布局这些控件最后将该布局设置为主窗体的布 局。如下面例子所示#include QtWidgets/QApplication
#include QtWidgets/QDialog
#include QtWidgets/QLabel
#include QtWidgets/QLineEdit
#include QtWidgets/QHBoxLayoutclass MyDlg : public QDialog
{
public :MyDlg(QWidget* parent  Q_NULLPTR) :QDialog(parent){/** breif QT5中如何解决中文乱码问题* 常量QString::fromLocal8Bit和QStringLiteral* 对于字符串变量使用QString自带函数*/plabel  new QLabel(QString::fromLocal8Bit(姓名));pEdit  new QLineEdit;// 使用布局管理器布局控件QHBoxLayout *Layout  new QHBoxLayout;Layout-addWidget(plabel);Layout-addWidget(pEdit);// 设置窗口的布局管理器setLayout(Layout);setWindowTitle(tr(Find));setFixedHeight(sizeHint().height());}
private:QLabel* plabel;QLineEdit* pEdit;
};
int main(int argc, char *argv[])
{QApplication a(argc, argv);MyDlg mydlg;mydlg.show();return a.exec();
}
12345678910111213141516171819202122232425262728293031323334353637383940使用Qt Designer设计界面 采用Qt Designer使得快速创建对话框成为可能。在Qt Designer环境中所有的操作都采用可视化的操作可拖放控件、关联信号与槽、设置特定控件的属性。如下图所示 动态加载UI文件并生成界面  前面的两种方法需要事先创建好相应的文件或代码然后连同其它文件进行编译如果后期要修改界面则必须修改代码或UI文件并重新编译。  而不需要重新编译整个程序的方法是采用动态加载UI文件的方式。UI文件采用Qt Designer编辑然后在程序中调用UI文件如下面代码所示#include guitest3.h
#include iostream
#include QtWidgets/QApplication
#include QFile
#include QtUiTools/QtUiTools
#include QString#pragma comment(lib, Qt5UiToolsd.lib)
int main(int argc, char *argv[])
{QApplication a(argc, argv);QUiLoader loader;QFile file(./dialog.ui);loader.load(file)-show();return a.exec();
}1234567891011121314151617QApplication QApplication 类管理图形用户界面应用程序的控制流和主要设置。 可以说 QApplication是Qt的整个后台管理的命脉它包含主事件循环在其中来自窗口系统和其它资源的所有事件被处理和调度。它也处理应用程序的初始化和结束并且提供对话管理。它也处理绝大多数系统范围和应用程序范围的设置。 对于任何一个使用Qt的图形用户界面应用程序都正好存在一个QApplication对象而不论这个应用程序在同一时间内是不是有0、1、2或更多个窗口。三、Qt Widgets、QML、Qt Quick的区别QT为了进一步的实现界面和逻辑代码的分离引入了Qt Quick库可以让用户很方便的配置丰富的应用界面。与传统的Qt Widgets相比Qt Quick用脚本QML及JS类似于DirectUI而Qt Widgets用C即传统GUI。Qt Quick是一种脚本语言(类似于css)。Qt是开发平台包含了Qt Quick的运行库。Qt和Qt Quick的关系就像 “网页”与“样式表”的关系。如果你的界面使用Qt Gui写的那么用不了qml因为qml的主要作用就是用来做画面的。把Qt Gui程序当成一个C程序来看。如果想显示qml做的画面在Qt Gui程序中打开qml的画面而不要打开QWidget那种画面即可。QtQuick完成qml脚本到c的转换就像网页中的javascript不需要编译可以直接运行一样。这样不需要编译就可以直接改脚本来实现功能在嵌入式设备里用起来很方便。 详细可以参见“一去丶二三里”的博客https://blog.csdn.net/liang19890820/article/details/54141552版权声明本文为博主原创文章未经博主允许不得转载。 https://blog.csdn.net/hhhuang1991/article/details/79795879-----------------------------------------------------------------------------------------------------------------------------------------------------------------GUI转为console mode在main.cpp中的修改main其他的不改int main(int argc, char *argv[])  //or int main(int argc, char **argv){     //红色为GUI的code    QApplication a(argc , argv);    //MainWindow w; //改为console mode时需要屏蔽    //w.show(); //改为console mode时需要屏蔽    //return a.exec(); //改为console mode时需要屏蔽    //灰色为console mode的code    MainWindow RunConsole;    return RunConsole.RunConsoleMode(argc,argv);}在MainWindow 这个class中定义public RunConsoleMode(argc,argv)这个APIRunConsoleMode(int argc, char **argv){    for(int i  0; iargc ; i)    {        printf(**argv[%s] , argv[i] ); //打印出console mode的输入参数    }}如cmd输入AA.exe -a -b则argv[0]  AA.exe ; argv[1]   -a ;  argv[2]  -b