为什么Qt for C ++仍然是事实:F噪音

如今,当您谈论桌面开发时,人们看着您就像是某种Luddite。 尽管对移动技术进行了大肆宣传,但诚实的事实是,最高效,最复杂的工作仍在台式机上(或通过在台式机上运行的浏览器)进行。

我喜欢Java,Swift及其它们,但是在构建桌面应用程序时,串联Qt的C ++仍然是最好的。 以下是我在2017年仍然是Qt迷的一些原因:

简单

具有C ++的Qt 易于使用。 唯一可比较的其他开发环境是XCode。 在启动过程中有了无数的出色范例,很快就可以弄湿自己的脚。 我知道,成为编码员的吸引力在于解决“凡人”几乎无法理解的那种复杂性,但是我还是简化UI构建之类的基本任务的忠实拥护者,以使其成为一门艺术而不是代替它可以解决一个复杂的数学问题。 Qt来自Java Swing和PyGTK背景,对我来说,Qt是天堂。

快速。 非常快。

众所周知,C ++是一种非常快速的语言,我相信Qt已经利用了这种速度。 比较我过去开发的软件的开发和交互,Qt总是比较灵活(我没有做任何基准测试,所以我可能是错的)。 即使在今天,当我大部分时间都在XCode上度过时,我仍然不禁为Qt的速度和轻便程度惊叹。 当然,这可能是基于我作为编码员的内部偏见和限制。 以下是我很久以前进行的基于GUI的原始归类的摘要。 在给定大数据集的情况下,它的工作方式像一种魅力,并且比Java更加清晰。 您可以自己尝试。

  // MergeSort.cpp 
//类MergeSort成员函数定义。
  #include  
使用std :: vector;
  #include“ merge_sort_budget.h” //类MergeSoft定义 
  / ** 
MergeSort类的构造函数。

@param btList bt列出预算选项卡列表。
* /
MergeSortBudget :: MergeSortBudget(BudgetTabList btList)
{
大小= btList.size(); //验证vectorSize
  //使用带有不同日期的随机BudgetTabItems填充向量 
对于(int i = 0; i <btList.size(); i ++)
{
data.push_back(btList.at(i));
}
} //结束MergeSort构造函数
  // 
  / ** 
分割向量,对子向量进行排序并将子向量合并为已排序向量

@param bt列出预算标签列表。
@不返回任何内容。
* /
无效的MergeSortBudget :: sort(BudgetTabList btList)
{
sortSubVector(0,size — 1,btList); //对整个向量进行递归排序
} //结束函数排序
 / ** 
递归函数对子向量进行排序

@param低标签。
@param高高标签。
@param bt列出预算标签列表。
@不返回任何内容。
* /
MergeSortBudget :: sortSubVector(int低,int高,BudgetTabList btList)
{
//测试基本情况; 向量的大小等于1
if((high — low)> = 1)//如果不是基本情况
{
int middle1 =(低+高)/ 2; //计算向量的中间
int middle2 = middle1 +1; //计算下一个元素
  //将向量一分为二; 对每一半进行排序(递归调用) 
sortSubVector(low,middle1,btList); //向量的前半部分
sortSubVector(middle2,high,btList); //向量的后一半
  //分割调用返回后合并两个排序的向量 
merge(low,middle1,middle2,high,btList);
} // 万一
} //结束函数sortSubVector
  / ** 
将两个排序的子向量合并为一个排序的子向量

@param左移。
@param middle1高标签。
@param middle2高标签。
@param在高选项卡的右边。
@param bt列出预算标签列表。
@不返回任何内容。
* /
void MergeSortBudget :: merge(int左,int middle1,int middle2,int右,BudgetTabList btList)
{
int leftIndex =左; //索引到左子向量
int rightIndex = middle2; //索引到正确的子向量
int CombinedIndex =左; //索引到临时工作向量
vector 组合; //工作向量
为(int i = 0; i <size; i ++)
Combine.push_back(BudgetTabItem(“”,0,0,0));
  //合并向量,直到到达任意一个的结尾 
而(leftIndex <= middle1 && rightIndex <= right)
{
//将较小的当前元素放入结果
//并移到向量中的下一个空间
如果((data [leftIndex] .getYear()> = data [rightIndex] .getYear()
&& data [leftIndex] .getMonth()> data [rightIndex] .getMonth())||
(data [leftIndex] .getYear()> data [rightIndex] .getYear()
&& data [leftIndex] .getMonth()> = data [rightIndex] .getMonth())||
(data [leftIndex] .getYear()> data [rightIndex] .getYear()
&& data [leftIndex] .getMonth()<data [rightIndex] .getMonth()))
Combined [combinedIndex ++] = data [leftIndex ++];
其他
Combined [combinedIndex ++] = data [rightIndex ++];
} //结束片刻
  if(leftIndex == middle2)//如果在左向量的末尾 
{
while(rightIndex <= right)//在其余向量中复制
Combined [combinedIndex ++] = data [rightIndex ++];
} // 万一
else //在右向量的末尾
{
while(leftIndex <= middle1)//复制剩余的左向量
Combined [combinedIndex ++] = data [leftIndex ++];
} //结束
  //将值复制回原始向量 
for(int i =左; i <=右; i ++)
{
BudgetTabItem项目= Combined [i];
item.setTabIndex(i);
数据[i] =项目;
}
} //结束函数合并
  / ** 
向量中的显示元素

@param没有。
@不返回任何内容。
* /
MergeSortBudget :: displayElements()常量
{
displaySubVector(0,size — 1);
} //结束函数displatElements
  / ** 
在向量中显示某些值

@param没有。
@不返回任何内容。
* /
MergeSortBudget :: displaySubVector(int low,int high)const无效
{
//输出对齐空间
对于(int i = 0; i <low; i ++)
// cout <<“”;
  //输出向量中剩余的元素 
为(int i =低; i <=高; i ++)
{
BudgetTabItem项目=数据[i];
}
} //结束函数displatSubVector
  / ** 
获取排序的索引。

@param月。 标签页的月份。
@param年。 制表年份。
@return sortedIndex
* /
int MergeSortBudget :: getSortedTabIndex(int month,int year)
{
int sortedIndex;
为(int i = 0; i <size; i ++)
{
如果((data [i] .getYear()==年)&&(data [i] .getMonth()==月))
{
sortedIndex = data [i] .getTabIndex();
}
}
返回sortedIndex;
}

平台不可知

在移动开发中一直非常重视平台不可知性,并且在开发许多工具时都考虑到了这一点。 Qt很久以前就在台式机上做了,而且做得很大。 将您的应用程序移植到不同的平台上并不难。 它们几乎可以在每个操作系统/平台上运行,几乎不需要移植。

抢购当前的时代精神

应用。 应用。 应用! 移动应用! “嘿,伙计,你能为我创建一个应用程序兄弟吗?”老大学的好友说。 最近,感觉无处不在与移动性以及成功的移动性相关联。 也许是真的。 就像听主流媒体不停地弹奏AI一样疲惫不堪。 也许这只是我的感伤,但Qt却具有真实可靠的编程体验-一种不基于炒作或最新热点的编码文化。 它先进但原始。 它很全面,但没有关闭。 感觉很真实。 感觉是真的。 感觉不到StackOverflow-y。 我最近看了一个很酷的WIRED纪录片,讲述了以色列的创业现场。 这部纪录片让我有种刚开始修Q Qt时的感觉,就像我是真实事物的一部分一样。 在下面查看:

有一整代的编码人员可能会犯这样一个悲剧性的错误:忽略桌面和Qt(使用C ++)。 这不仅会损害历史,而且会损害它们的整体和广泛性。 那里有整个计算机科学的广阔天地:目前被炒作的领域是AI和数据科学。 在未来六个月内,我很可能会全职工作。 话虽这么说,没有什么比用Qt之类的从头开始构建东西更亲切的了,这是我的荣幸,任何程序员都不应否认自己。

我是Thabo Klass,我在Spreebie工作。 干杯。