找回密码
 立即注册
Qt开源社区 门户 查看内容

Qt武林秘籍(一)

2019-8-11 11:44| 发布者: admin| 查看: 688| 评论: 0

摘要: 一、开发经验总结(1~20)1. 当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着去看下一个错误,往往后面的错误都是由于前面的错误引起的,第一个解决后很可能都解决了。2. 定时器是个好东西,学会 ...
一、开发经验总结(1~20)

1. 当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着去看下一个错误,往往后面的错误都是由于前面的错误引起的,第一个解决后很可能都解决了。

2. 定时器是个好东西,学会好使用它,有时候用QTimer::singleShot可以解决意想不到的问题。

3. 打开Qt Creator,在构建套件Kit的环境中增加MAKEFLAGS =- j8,可以不用每次设置多线程编译。珍爱时间和生命。新版的QtCreator已经默认就是j8。

4. 如果你想顺利用QtCreator部署安卓程序,首先你要在AndroidStudio里面配置成功,把坑全部趟平。

5. 很多时候找到Qt对应封装的方法后,记得多看看该函数的重载,多个参数的,你会发现不一样的世界,有时候会恍然大悟,原来Qt已经帮我们封装好了。

6. 可以在pro文件中写上标记版本号+ico图标(Qt5才支持)。

'''
VERSION      = 2018.7.25
RC_ICONS    = main0.ico

'''

7. 管理员运行程序,限定在MSVC编译器。
'''
QMAKE_LFLAGS += /MANIFESTUAC:"level='requireAdministrator' uiAccess='false'" #以管理员运行

QMAKE_LFLAGS += /SUBSYSTEM:WINDOWS,"5.01" #VS2013 在XP运行
'''

8. 运行文件附带调试输出窗口:
CONFIG += console pro

9. 绘制平铺背景QPainter::drawTiledPixmap,绘制圆角矩形QPainter::drawRoundedRect(),而不是QPainter::drawRoundRect()。

10. 移除旧的样式
'''
//移除原有样式
style()->unpolish(ui->btn);
//重新设置新的该控件的样式。
style()->polish(ui->btn);
'''



11. 获取类的属性
'''
const QMetaObject *metaobject = object->metaObject();
int count = metaobject->propertyCount();
for (int i = 0; i < count; ++i) {
    QMetaProperty metaproperty =

    metaobject->property(i);

    const char *name = metaproperty.name();
    QVariant value = object->property(name);
    qDebug() << name << value;
}
'''

12. Qt内置图标封装在QStyle中,大概七十多个图标,可以直接拿来用。
QStyle::SP_TitleBarMenuButton

13. 根据操作系统位数判断加载
'''
win32 {
    contains(DEFINES, WIN64) { DESTDIR =  

    $${PWD}/../../bin64
    } else { DESTDIR = $${PWD}/../../bin32 }
}
'''

14. Qt5增强了很多安全性验证,如果出现setGeometry: Unable to set geometry,请将该控件的可见移到加入布局之后。

15. 可以将控件A添加到布局,然后控件B设置该布局,这种灵活性大大提高了控件的组合度,比如可以在文本框左侧右侧增加一个搜索按钮,按钮设置图标即可。

'''
QPushButton *btn = new QPushButton;
btn->resize(30, ui->lineEdit->height());
QHBoxLayout *layout = new QHBoxLayout(ui->lineEdit);
layout->setMargin(0);
layout->addStretch();
layout->addWidget(btn);
'''

16. 对QLCDNumber控件设置样式,需要将QLCDNumber的segmentstyle设置为flat。

17. 巧妙的使用findChildren可以查找该控件下的所有子控件。findChild为查找单个。

'''
//查找指定类名objectName的控件
QList<QWidget *> widgets = parentWidget.findChildren<QWidget *>("widgetname");

//查找所有QPushButton
QList<QPushButton *> allPButtons = parentWidget.findChildren<QPushButton *>();

//查找一级子控件,不然会一直遍历所有子控件
QList<QPushButton *> childButtons = parentWidget.findChildren<QPushButton *>(QString(), Qt::FindDirectChildrenOnly);
'''

18. 巧妙的使用inherits判断是否属于某种类。
'''
QTimer *timer = new QTimer;
timer->inherits("QTimer");               // return true
timer->inherits("QObject");              // return true
timer->inherits("QAbstractButton"); // return false
'''

19. 使用弱属性机制,可以存储临时的值用于传递判断。

20. 在开发时,无论是出于维护的便捷性,还是节省内存资源的考虑,,都应该有一个 qss 文件来存放所有的样式表,而不应该将 setStyleSheet 写的到处都是。

二、 论坛/博客/网站推荐

|qtcn|http://www.qtcn.org|

|豆子的空间|https://www.devbean.net|

|yafeilinux|http://www.qter.org|

|一去二三里

|http://blog.csdn.net/liang19890820|

|乌托邦2号

|http://blog.csdn.net/taiyang1987912|





未完待续



最后安利一波广告

**欢迎关注微信公众号【高效程序员】,C++/Python、学习方法、写作技巧、热门技术、职场发展等内容,干货多多,福利多多!**




点击蓝字关注我们



----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:Qter欢聚在上海,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了