标题:Qt/C++开发经验小技巧281-285
作者:liudianwu
日期:2023-08-23 11:50
内容:
281. 悬停窗体QDockWidget默认在标题栏右键会弹出悬停模块的显示隐藏菜单,如果需要去掉,会发现设置Qt::NoContextMenu或者事件过滤器拦截都是无效的,必须设置 dockWidget->setContextMenuPolicy(Qt::PreventContextMenu); 。
282. Qt中的布局有个默认的margin边距值和spacing间距值,在没有设置该值的情况下,会根据运行的环境自动设置该值,比如1080P分辨率和2k分辨率的电脑,该值的默认值不一样,并不是你在UI设计的时候属性栏中看到的值,这个要特别注意,你看到的7可能在目标平台运行的时候是11,如果一定要按照你想要的值来运行,可以重新设置即可,设置过哪一个就该值按照设定的来。如果不想一个个设置调整布局中的间距边距,你需要用到万能大法样式代理,继承QProxyStyle类然后重新设置样式即可。该方式也是属于斗皇级别的UI外观控制策略,最终所有的qss样式也是要通过该样式去绘制的,意味着这里你可以重新定义和控制所有控件的外观样式,非常的强大。
```cpp
//也可以继承Qt内置的样式比如 QFusionStyle/QCleanlooksStyle
class QCustomStyle : public QProxyStyle
{
public:
int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const {
if (metric == QStyle::PM_LayoutHorizontalSpacing || metric == QStyle::PM_LayoutVerticalSpacing) {
//将布局中的横向和垂直间距设置成10
return 10;
} else if (metric == QStyle::PM_ButtonMargin) {
//将所有按钮的margin边距设置成20
return 20;
}
return QProxyStyle::pixelMetric(metric, option, widget);
}
};
qApp->setStyle(new QCustomStyle);
```
283. 养成良好的编程习惯至关重要,尤其是对变量的初始化,包括一些类对象的定义后也务必记得初始化,否则在 ..