qt实用小技巧
- connect()函数中,参数(*,SIGNAL(),*,SLOT())为旧版本用法,某些情况会导致信号查找不到,且信号与槽函数中参数个数必须一一对应; 5版本以上可用参数(*,&类名::信号名,*,&类名::槽函数名),其中连接时不需要写参数,且信号参数>槽函数参数即可(如槽函数无参数);
- connect()函数第五个参数可以决定在多线程中的槽函数相应方式;
- connect()函数中可使用lambda表达式,如: connect(CType, &CType::signal, CCType, [CCType](){槽函数内容}) ;适用于槽函数仅调用一次的情况;
- auto obj = qobject_cast<QAction*>(sender())可以在槽函数中获取发信号的对象;
- dynamic_cast<需转换子类对象*>(),实现从父类对象往子类对象的转换;
- 重载虚函数时可以右键继承父类中Refactor选项中insert Virtual Functions of Base Classes选项,使用编译器自动生成重载的虚函数的函数声明,有效避免重载失败的问题;
- QtableView中设置model铺平的使用方法:
- m_tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch) 缺点:列中无法使用鼠标拖动列宽(获取可通过重载完善)
- m_tableView->horizontalHeader()->setStretchLastSection(true); 缺点:暂无发现,可实现所有列宽的调整
- 往QWidget中添加组件需往layout中添加,最好新建一个layout设置进去,否则若QWidget为新建的类,则直接取出来的layout为空,往里添加组件会崩溃;
- QTabWidget构造函数中若新建一个parent为this的类,则第一个分页的tab点击事件失效;
- QScrollArea类中问题以及解决办法:
- 问题:若直接设置layout,则布局中的控件会挤压折叠,不会出现滚动条;
- 解决办法:先设置Qwidget,再设置layout;
- 存在的问题:给QScrollArea类setWidget后,对其中widget的任何修改均无效;
- 解决办法:保存layout,每次要对滚动区域中添加控件时,new一个QScrollArea类,并执行2的操作;
- 错误信息:invalid new-expression of abstract class type 'C类名' 。 使用类的时候注意该类是否存在纯虚函数,若存在,必须重写才能使用;
- QFile file(path); file.open(); QTextStream str(&file); stream << content; file.close(); 实现文件的内容写出与创建;
- QtChart最好在两千个点内使用,超过两千个点很大可能就存在刷新卡顿的问题;可使用QCustomPlot替换使用(缺点:需要拉入框架代码,最好以pkg方式添加);
- model-view框架下,view的resize需要在setView后,否则resize失效;
-
给pixmap上色:QPixmap pix(“.png”); QBitmap content = pix.createMaskFromColor(Qt::white);
Pix.fill(Qt::blue); // 将颜色铺满整个pixmap,填充全部
pix.setMask(content) //同颜色铺满整个pixmap
- model的Data()中若有精度大于2位的要求,需将小数转成QString再进行return,若直接return包含三位及以上小数位的double,则显示为四舍五入的结果;
生命不止 学习不停
浙公网安备 33010602011771号