qt----编程注意事项以及技巧
1、设置在子窗口关闭时销毁这个类的对象(一般为自定义类)
setAttribute(Qt::WA_DeleteOnClose);
2、设置编码。有时候即便采用了QString::fromlocal8bit()之后中文仍然显示乱码,那么这时候在main函数中设置编码即可
#include <QTextCodec>
QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf8"));
3、正确引用资源的路径
在左侧的资源列表中,如果要使用new.png这张照片,那么应该这样设置路径信息------:/menubar/images/new.png
4、改变光标状态
当加载资源或者其它等待状态下,可以通过QApplication::setOverrideCurson(Qt::WaitCursor)来改变样式。当操作完成后,再通过QApplication::restoreOverrideCursor()来恢复鼠标原有的样式。
5、过滤文件命,去掉文件名中的特殊字符。比如空格、省略号等
sCurFileName = QFileInfo(fileName).canonicalFilePath();
6、简单的右键菜单
重写contextMenuEvent(QContextMenuEvent* e)事件,然后在里面将要显示的QAction添加到一个QMenu中即可。如下:
QMenu *pMenu = new QMenu; QAction *pNew = new QAction(tr("New")); QAction *pSave = new QAction(tr("Save")); QAction *pLoad = new QAction(tr("Load")); pMenu->addAction(pNew); pMenu->addAction(pSave); pMenu->addAction(pLoad); pMenu->exec(e->globalPos()); delete pMenu;
7、软件启动画面
通过类QSplashScreen类实现,主要是在软件启动为初始化以及其它网络操作时制作美化效果。该类通常在main中使用。如下所示:
int main(int argc, char *argv[]) { QApplication a(argc, argv); QPixmap pix(":/Logo.png"); QSplashScreen Screen(pix); Screen.resize(pix.size()); QMyView view; view.show(); Screen.finish(&view); return a.exec(); }
8、系统托盘
在头文件中添加类的前置声明 class QSystemTrayIcon
然后添加closeEvent()事件、私有槽 void trayIconActived(QSystemTrayIcon::ActivationReason activeReason);以及私有成员变量 QSystemTrayIcon *m_pTrayIcon;
在定义文件中的构造函数中添加代码如下:
m_pTrayIcon = new QSystemTrayIcon(QIcon(":/logo.png")); m_pTrayIcon->setToolTip("This is system icon"); //创建托盘菜单 QMenu *pMenu = new QMenu; pMenu->addAction("Exit", qApp, SLOT(quit())); m_pTrayIcon->setContentMenu(pMenu); connect(m_pTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayIconActived(QSystemTrayIcon::ActivationReason))); m_pTrayIcon->show();
然后实现曹函数trayIconActived以及关闭函数closeEvent()
void QQProc::closeEvent(QCloseEvent *event) { if(isVisible()) hide(); m_pTrayIcon->showMessage("titile-hahah", "content-try agein"); event->ignore(); } void QQProc::trayIconActived(QSystemTrayIcon::ActivationReason activeReason) { if(activeReason == QSystemTrayIcon::Trigger) show(); }
9、编码问题
在main中设置 QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf8")); 别忘了添加头文件#include <QTextCodec>
除此之外,还有
10、使用qt命令窗口进行编译make文件
描述:通过类似"Qt5.4 for Desktop"进行编译时,输入"make"命令发现给出错误是:"make不是命令也不是程序"。
解决:在2009以后的版本,不是用make命令了,是用mingw32-make
11、翻译国际化
我们在编写代码时,总会需要将不同的语言相互转化、翻译。但是如果遇到C++和qml同时都需要翻译时改怎么办?
当lupdate程序访问pro文件时,提取的翻译文本只会是SOURCES变量中列举的文件,所以只能处理C++源文件。但是如果还有QML呢?可以使用lupdate_only条件,即
lupdate_only{
SOURCES = main.qml reminder.qml
}
也可以这样:
lupdate_only{
SOURCES = *.qml \
*.js \
qml/xxx/*.qml
}
也就说,当使用lupdate_only时,C++编译器会忽略代码块内的SOURCES变量列举出的源码文件,而lupdate工具会正确识别他们

浙公网安备 33010602011771号