QT开发总结

QT开发程序效率还是很高的,特别是用了QT creator 2.2.1。这几天用QT开发程序,似乎找到了用C++开发程序的感觉,以前用c++写程序就像是在自虐,就连string、time等基本类型都得东拼西凑的找类库,MFC的文档/视也搞得我晕头转向,关键是用着别扭,可能是WinForms用习惯了,再说好像也过时了,开发工具支持也不咋地!(VC的粉丝不要骂我),学了一段时间WTL,感觉只适合高手使用,纯粹浪费感情!QT对于像我这样长期以.net混饭吃的程序员,快速切换到c ++编程再合适不过了。最起码,自己的编程想法很快就能实现!而不用先A必B,B必C,C必D... 痛苦啊!也可能是我没找到MFC和WTL还有VC的应用场景?

反正,还是QT符合我的想法:像使用C#一样使用C++,为我快速编个小程序提供了良好的基础设施。当然了C#和C++的很多概念是不同的,现在把这几天的编程经验总结一下:

    1. QProcess类:有一点与.net的Process很不同,那就是:QProcess不能取得当前进程,也就是没有GetCurrentProcess方法。造成的直接结果就是如果你想Kill掉自己,只能通过winAPI。我想可能QT是为了跨平台的考虑。
#include  < windows.h >
void  killMe(){
        DWORD dwProcessID 
=  ::GetCurrentProcessId();   // 获取当前进程ID号
        HANDLE hProcess  =  ::OpenProcess(PROCESS_TERMINATE,FALSE,dwProcessID);  // 根据进程ID返回对象句柄
        ::TerminateProcess(hProcess, 0 );   // 根据对象句柄结束进程
        CloseHandle(hProcess);

    }
  
    2. Signal 和 Slot:相当于C#中的事件和事件处理程序,使用connet连接信号和槽。
connect(setAction,SIGNAL(triggered()), this ,SLOT(Settings())); » 设置默认编辑器

    QT文档中的事件Event,通过再子类中重写来自定义行为。此事件非彼事件,例如重写窗体的close事件:

void  MainWindow::closeEvent(QCloseEvent  * )
{
    iProcess::killMe();
}

    3.  一定要尝试一下QScriptEngine类:嵌入JavaScript脚本是如此的简单。嵌入脚本的好处当然是提高程序的灵活性,还有一个好处是提高开发效率:C++的编译速度明显不如C#快,嵌入个脚本就不一样了,脚本不用编译啊!

    QScriptEngine *  engine = new  QScriptEngine;
    QString basePath
= QCoreApplication::applicationDirPath();
    QFile file(basePath
+ " \\test.js " );
    
if  ( ! file.open(QIODevice::ReadOnly  |  QIODevice::Text))
    {
        QMessageBox::information(
this , "" , " open failed " );
        
return ;
    }
    QByteArray bytes
=  file.readAll();
    QString scripts(bytes);
    engine
-> evaluate(scripts);
    
if (engine -> hasUncaughtException())
    {
        QMessageBox::information(
this , " error " ,engine -> uncaughtException().toString());
    }
    file.close();

      只要修改test.js就可以很容易的改变我的程序逻辑。如果脚本要与主程序交互:

    QScriptValue mainWin  =  engine -> newQObject( this );
    engine
-> globalObject().setProperty( " host " , mainWin);

      test.js中就可以直接访问host了。

      4. 程序中要在注册表中存些设置信息,就直接用QSettings类。

      5. QThread类:不能Sleep,只好又用API。以下代码不是很准确的延迟,但并不堵塞界面线程执行。

#include  < windows.h >

void  sleep( int  svalue)
{
    QTime dieTime 
=  QTime::currentTime().addSecs(svalue);
    
while ( QTime::currentTime()  <  dieTime )
    {
        ::Sleep(
100 );
        QCoreApplication::processEvents(QEventLoop::AllEvents, 
100 );
    }
}

  6. Debug版本内存占用较多,请用Release版本。多用QT Quick写界面,类似于WPF。

特此总结,因为编完这个小程序可能又要很久不用QT了!

 

特别推荐Qt开发的windows小程序实例源代码:

生成的程序全部打包只有4M多,用户解压后可以直接运行。

转载于:https://www.cnblogs.com/hjblog/archive/2011/06/29/2093655.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值