- MFC下的sleep()函数是以微秒为单位的,Linux下的speep()以秒为单位,usleep以微妙为单位;
- MFC下的ShowWindow()用于显示窗口,QT中显示窗口通过show()函数;
- MFC下的控件可以绑定一个变量(例如输入控件),当绑定的变量修改值后,通过ShowWindow()可以更新到界面上,而QT上不需要绑定变量,直接通过控件的成员函数设置值后数据会自动更新到界面上;
- MFC中通过注册回调函数将事件和函数绑定,当事件发生时会触发注册的回调函数,QT中通过信号/槽的方式实现类似功能;
- 如果你要在C中通过QT弹出对话框,首先需要新建一个QApplication app,然后新建一个对话框对象并调用show(),最后还需要执行app.exec()让对话框进入QT的事件循环,此时对话框才能接收到QT事件以显示对话框;
- 如果你要在C中在系统托盘区域旁弹出一个提示窗口,可能有些复杂,首先你需要新建一个QApplication app,然后新建一个QSystemTray tray并调用tray.show(),调用QTimer::singleShot()函数指定10ms(tray.show()后需要一段时间tray才能初始化完成,否则后面的调用可能无法正常显示)后调用tray.showMessage()。
- QT中获取网卡硬件地址和IP地址的方法可使用如下代码:
foreach (QNetworkInterface interface, QNetworkInterface::allInterfaces()) { qDebug() << interface.hardwareAddress() << ", flags:" << interface.flags(); foreach (QNetworkAddressEntry entry, interface.addressEntries()) { qDebug() << entry.ip(); } }
Flags中包含一些标志信息,包括是不是回环网络,网卡是否启动等;
8. IE的插件为ocx插件,在linux下要实现firefox的插件可通过NPAPI和QT/C++交互,目前在firefox 52 上可支持,新版本不一定能支持,例子请点击链接https://github.com/qtproject/qt-solutions/tree/master/qtbrowserplugin,将编译出来的库拷贝到/usr/lib/mozilla/plugins/目录下,访问自带的实例网页即可;
9. Linux下保证进程唯一性的方式可通过如下方式实现:
a) 应用启动时判断/var/run下是否存在appname.pid文件,如果存在则继续步骤b,若不存在则创建.pid文件;
b) 读取文件中的进程号,获取进程号后判断此进程是否存在,若存在,退出程序;
c) 若进程不存在,获取本进程号并写入.pid文件,程序继续执行;
10. MFC中调用AfxMessage()和messagebox()弹出提示对话框,QT中使用QMessageBox()弹出提示对话框,可自定义函数messagebox(),函数中通过QMessageBox()弹出对话框;
11. 以下为MFC和QT中常用控件的对应关系:
MFC |
QT |
|
单行显示标签 |
QLabel |
|
单行文本输入框 |
CEdit |
QLineEdit |
按钮 |
Button |
QPushButton |
组合框 |
CComboBox |
QComboBox |
对话框 |
CDialogEx |
QDialog |
系统托盘 |
NOTIFYICONDATA |
QSystemTray |
字符串 |
CString |
QString/string |
指针 |
HANDLE |
void * |
定时器 |
CTime |
QTimer |
12. MFC中提供了CIPAddressCtrl控件用于输入并显示IP地址,QT中没有提供此类插件,如有需要,可从如下网址下载:
https://github.com/lizhenneng/IPv4Edit.git
可支持QT4/QT5,编译后放入/usr/lib/x86_64-linux-gnu/qt5/plugins/designer/,通过 qtcreator 打开设计器,即可在左侧控件栏看到IPv4Edit控件,如果是在QT4中使用此 控 件,则 qtcreator也需要基于QT4运行,否则在qtcreator的设计器左侧控件栏中 不显示此控件, 但程序运行的时候会显示,若一定需要在设计器中显示此控件,可以 现将基于 QT4编译 的控件拷贝到/usr/lib/x86_64-linux-gnu/qt4/plugins/designer/,然 后运行基于QT4的d esigner打开界面文件即可显示此控件。
13. 如果要获取当前程序的工作路径,在QT中可调用QDir::currentPath()获取;
14. 在数据加解密及传输过程中,一般使用base64格式传输数据,QT中提供的QByteArray::fromBase64()及QByteArray::toBase64()可方便进行普通格式和base64格式之间的转换;
15. 对于设备的热插拔(如ukey),可通过netlink socket方式监听内核的插拔事件;
16. 通过进程名获取进程号可直接遍历/proc文件系统;
17. Firefox可使用~/.mozilla/firefox/profiles.ini及对应Path路径下的prefs.js来配置,如果需要一个更高优先级的配置文件,可在Path指定路径下创建user.js并添加配置参数以覆盖prefs.js中的配置;
18. QT资源的回收,可在退出应用时使用qApp::quit(),QT控件对象会按照自己的方式回收界面资源,请不要使用系统函数exit(),使用此方式会导致QT控件资源不能正确回收;