QT能开发大型软件吗?

2024-05-14

1. QT能开发大型软件吗?

Qt 是一个跨平台应用程序和 UI 开发框架。使用 Qt 您只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。   功能   直观的 C++ 类库 跨桌面和嵌入式操作系统的移植性   具有跨平台 IDE 的集成开发工具 在嵌入式系统上的高运行时间性能,占用资源少   平台:   Windows   Linux/X11   Mac   Windows CE/Mobile   嵌入式 Linux(Embedded Linux)   Symbian   Maemo   其他平台   MeeGo   Qt 用于移动平台   使用 Qt 进行移动平台开发   使用 Qt 只需编写一次代码,然后就可在任何平台部署,并快速推向市场。   设计新颖的用户体验   开发简洁、高性能的应用程序   针对 Symbian/S60、Maemo、MeeGo 和 Windows Mobile 设备进行开发   将移动应用程序移植到 Windows、Mac 和 Unix/Linux (X11) 的桌面系统

QT能开发大型软件吗?

2. 电桌炉QT-FJA的烹饪功能怎么用?

使用预约功能的步骤如下:水箱注水、放置菜肴于箱体内、开机、选择烹饪模式、设置烹饪温度、设置烹饪时间、设置预约烹饪时间、确认并完成预约设置、等待到达设置的预约时间后开始烹饪、进行烹饪、烹饪结束并自动关机、清洁蒸箱。

3. 有用QT开发安卓应用的吗

 不看好Qt for Android。以下简称QfA.

  1. 跨平台只在pc上有优势,在移动设备上毫无优势。移动设备整体的应用风格需要保持一致,你外部加进来一个ui,倒是和平台保持一致了。你如何保持和原生ui的这种使用一致性。

  2.在开发易用度上,Android(java) api 已经做得很好,包括事件,广播,服务等Qt里有的基本上Android api里已经做得很好,从Qt开发者转为java开发者也很容易。 而如果要写QfA应用,开发者不仅要懂Qt,同样也避免不了要写java代码。

  3. 如果要写和其它app通信的时候,QfA的灾难性就来了。如果是上层的几乎等完整的搞一遍Android api吧。 另外对于和设备相关的一些调用(GPS/Telephony)等,QfA的工作量一下子就上来了,这时候你还指望qml么?

  4.性能呢? QfA对于图形渲染区的请求还得在java的接口请求,是不是又要绕了个大弯。

  5. 软件体积。 终端用户要用Qt app,势必要先装一个Qt lib, 或者在你的app 中一起静态发布。
  在有很多优秀的QfA app出现之前,大家不带乐意只为一个好的app 去装一个大的软件,而会愿意选择一个原生软件替代。

  6.官方支持。目前Qt开发团队多少人?但目前他们要支持多少平台。  如果没有一个比较大的商业级别软件在用QfA,官方能做的就是让这个软件在Android平台能编译,运行,解决一些明显的bug。

  7. Qt做mobile最好的机会就是被大款看上。她也曾经被看上过(nokia 和 intel)。 但是被Elop害死了。

有用QT开发安卓应用的吗

4. 现在大型单机游戏大都是用QT开发的吗?

Qt只是一个跨平台的应用程序开发框架,在游戏方面和使用C++也才不多,对于大型游戏开发还是要使用游戏引擎,所以几乎很少

5. 如何利用 QT 进行 web 与本地混合应用开发

如何利用 QT 进行 web 与本地混合应用开发是本文要讲述的内容,Qt提供了本地 C++对象与JavaScript的无缝集成,是进行本地与web混合应用开发的理想平台。

一、Qt Webkit 集成

利用Qt的Webkit 集成与QtNetwork模块,你完全可以进行本地桌面与web混合应用开发,你可以自由地混合JavaScript,样式表,Web内容和Qt组件。 Webkit是一个非常成熟的web浏览引擎。Qt中集成了这个大名鼎鼎的引擎,通过QtWebkit,你可以在C++ 中执行JavaScript,或者在网页中集成C++对象,并且通过JavaScript和这些对象进行交互。

一个现代的HTML渲染引擎只 是混合开发的一半,另一半就是本地应用和渲染对象的交互。QT的Webkit 集成提供了这种解决方案:

1.使用object标签嵌入Qt Widgets组件。这可以让使用C++代码的Qt组件包含在网页中,作为网页的部分外观。

2.在JavaScript中访问C++对象。你 可以在JavaScript环境中插入C++对象,让网页脚本直接访问你的数据结构。

3.在Qt中执行JavaScript。你可以在C++ 调用网页环境中的JavaScript函数,触发网页事件。

4.共享客户端存储。在JavaScript和C++中你都具有访问数据库的能 力,这样当下线时也能共享大量数据。

二、与嵌入的Qt对象交互

使用 QWebView 组件,有两种方法可以在网页中嵌入C++对象。你可以在网页的JavaScript中添加C++对象,或者也可以创建一个插件,然后在网页中使用 object标签嵌入。

第二种方法更容易入手。当在网页中放入 Widget组件时,它的所有public slots就像普通函数一样被网页中的JavaScript函数访问。

要在网页中添加一个Widget,首先要告诉你的QWebPage对象,该Widget可用,这个通过子类化QWebPlugFactory完成,
你需要 重新实现两个方法:plugs和create。plugs方法通知网页该Widget可用,create方法根据请求创建widget。

在 HTML网页中,widgets使用object标签创建。比如,下面这个标签试图创建一个 application/x-qt-colorlabel 组件。
  

要利用这种创建,必须要允许使用插件并且要告诉QWebpage插件的工厂类。在下面的代码中,ColorLabelFactory将 会根据application/x-qt-colorlabel的请求创建相应实例。
QWebSettings::globalSettings()->setAttribute(QWebSettings::PluginsEnabled, true);   webView->page()->setPluginFactory(new  ColorLabelFactory(this));  

ColorLabel有一个公开的slot: chagneColor(),这个对于网页中的JavaScript自动可用。在网页中插入一个指向该元素的链接,可以以一种简单的方式激活C++函数。
Change color!   

要反方向推进事件,必须要使你的对象在JavaScript文档上下文中可用。要对QWebPage的每一个 QWebFrame,调用addToJavaScriptWindowObject方法。这个方法允许你根据名字把一个对象添加到JavaScipt上下 文中。
webView->page()->mainFrame()->addToJavaScriptWindowObject( "eventSource", new eventSource( this ) );  

要连接刚添加对象eventSource的信号,要加上一段JavaScript代码,使用evaluateJavaScript方法 
完成。下面的代码将把eventSource对象的signalName信号连接到一个JavaScript函数destFunction。
webView->page()->mainFrame()->evaluateJavaScript( "eventSource.signalName.connect(destFunction);" );  

如果你把一个对象添加到一个以标准浏览器查看的JavaScript页面中,有一个信号需要知道。每一次JavaScript 
内容被清除,Frame都会释放 javaScriptWindowObjectCleared 
信号。为了使你的Qt对象一直可用,你需要连接这个信号,并且在这里调用 addToJavaScriptWindowObject函数。

如何利用 QT 进行 web 与本地混合应用开发

6. 现在用qt平台开发的应用程序多吗,或者说将来用QT平台开发程序会不会成为一种趋势

QT是经典的跨平台工具,而且可以应用于移动设备中,应该是应用的趋势。另外,QT本身也是一种编译器,完全基于C/C++,而且界面更加好用,方便你使用。

7. 在windows下的应用程序是用qt来制作还是用c

用QT吧,跨平台的开发环境

在windows下的应用程序是用qt来制作还是用c

8. 如何用Qt写一个同一时间只能运行一个实例的应用程序

为了使一个应用程序在同一时间只运行一个实例,需要用某种方法在程序启动时,检测是否已有正在运行的实例,如果有,则将本次启动的参数传递给前一个实例(例如需要打开的文档的路径),如果没有,则正常启动。
实现的方法有多种:
1. 用Windows API创建一个互斥量:
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    HANDLE hMutex = CreateMutex(NULL, TRUE, L"YourApp");     // 创建一个互斥量来保证只运行一个实例
    if(hMutex != NULL)
    {
        if(GetLastError() == ERROR_ALREADY_EXISTS)
        {
            QMessageBox::critical(qApp->activeWindow(), QObject::tr("An instance of this application has been run!"), QObject::tr("Only one instance can be run at a time!"));
            return 1;
        }
    }

    ...           // 以下是正常启动代码
}
注:如果保险起见,CreateMutex()中的字符串应该用一个GUID来保证其唯一性,Visual Studio中有一个生成GUID的工具,菜单“工具”->“创建GUID”,选择合适的定义形式,创建并拷贝到剪贴板即可。



此方法的缺点:1.使用了Windows API,不能跨平台;2.不能自动激活前一个实例的窗口。
2. 每次启动时用Windows API枚举进程,同时在第一次运行时用SetProp()函数给当前窗口设置属性,这样下次启动时,在枚举的进程中查找具有这个属性的窗口,若找到,说明已有实例在运行,将该实例的窗口激活;若未找到则正常启动。
此方法客服了前一方法的第2个缺点,但过于依赖Windows API函数(似乎还是MFC函数,对Qt程序好像不可行)。有兴趣的可以照这个链接里的代码试试
3. 利用QLocalSocket和QLocalServer,基本的思路是:
应用程序启动时首先尝试去连接一个QLocalServer,如果连接失败,说明自己是第一个实例,于是创建这么一个QLocalServer,否则将启动参数发送给QLocalServer然后退出。第一个实例的QLocalServer在收到后面启动的实例发来的参数时可以进行处理(例如激活第一个实例的窗口)。这个链接里有详细的示例代码供参考。
注:使用QLocalSocket和QLocalServer时,需要把QtNetwork库包含在项目文件中;
4. 用Qt Solutions里提供的QtSingleApplication类(最简单的方法,推荐)
从ftp://ftp.qt.nokia.com/qt/solutions/lgpl/ 下载QtSingleApplication的源码包,解压缩后按照INSTALL.TXT里的说明进行配置和编译,我选择编译成动态库,这样下次再用,只需引用头文件和lib文件即可,比较方便。
用法很简单,只需把原来main()里的QApplication对象换成QtSingleApplication对象,调用一下isRunning()方法进行判断即可。
// 原来的代码
int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    MyMainWidget mmw;

    mmw.show();
    return app.exec();
}

// 修改后的代码
int main(int argc, char **argv)
{
    QtSingleApplication app(argc, argv);

    if (app.isRunning())
        return 0;

    MyMainWidget mmw;
    mmw.show();
    return app.exec();
}
注1:QtSingleApplication的实现方法基本上也是利用QLocalServer和QLocalSocket,所以同样依赖于QtNetwork库;
注2:以上代码只展示了QtSingleApplication最简单的用法,这个类还有更多用法,请参考源码包中带的范例和文档。
QtSingleApplication的几种用法(直接使用源码,编译成动态库等)可以参考这个链接:Qt程序只运行一个实例
最新文章
热门文章
推荐阅读