您当前的位置: 首页 > 

龚建波

暂无认证

  • 3浏览

    0关注

    312博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

《QDebug 2019年10月》

龚建波 发布时间:2019-10-29 17:28:43 ,浏览量:3

一、Qt Widgets 问题交流 1.QObject多继承报错

父类列表中只能有一个QObject或其派生类:

并且QObject需要写在父类列表的第一个:

所以,正确写法如下:

2.给控件注册了过滤器,但有些事件没有被过滤器截获

有些控件具有子控件或者view,事件被其截获,我们需要把过滤器设置到子部件才能截获到这些事件。

以双击事件为例,有如下过滤器:

在QComboBox可编辑状态下,可以这样写:

通过debug打印的内容可以看到点击编辑区域实际上是被QLineEdit子部件截获了。

在QListView中通过viewport()来获取内部QWidget*指针:

3.给对象安装过滤器后,显示或者操作异常

看看是否是eventFilter函数处理相关事件后返回了true(返回true就不会再继续传递了)。

以ListWidget为例,过滤器中双击返回true后ListWidget的双击事件信号就不能触发了:

可以看到并没有打印“double click”,这种情况我们可以不返回rue:

这时点击item就能正常触发双击信号了。

4.QTreeView/QTreeWidget展开/收起节点

展开调用expand相关的函数,收起调用collapse相关的函数。

5.系统默认是英文,导致日历也是英文

Qt中有QLocale对象,封装了Locale的属性和方法,用来在不同语言下,实现各种数字与表达它们的字符串之间的转换。

ui->calendarWidget->setLocale(QLocale(QLocale::C,QLocale::UnitedStates));

通过上面的代码,我就把日历的Locale设置为了英国,于是就显示英文(下图左):

QLocale也可以用在格式化输出中:

    QLocale currentlocale = QLocale::system();
    qDebug()            
关注
打赏
1655829268
查看更多评论
0.0556s