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工具会正确识别他们

posted @ 2017-10-29 10:06  Qt王二狗  阅读(695)  评论(0)    收藏  举报