实用的属性(Qt::WidgetAttribute)

属性是用QWidget::setAttribute()设置和清除的。用QWidget::testAttribute()查询是否设置了某种属性。有些属性特殊便捷函数可以设置。

  • Qt::WA_AcceptDrops:接受拖放,QWidget::setAcceptDrops()是此设置的便捷函数。
  • Qt::WA_AlwaysShowToolTips:设置窗口(注意是窗口,当QWidget作为子部件时无效)为非活动时也显示提示信息。(setToolTip()设置了窗口提示信息)
  • Qt::WA_CustomWhatsThis:设置小部件在“这是什么?”模式中继续正常运行。
  • Qt::WA_DeleteOnClose:QWidget关闭时被delete。
  • Qt::WA_Disabled:设置小部件(注意是小部件,对窗口无效)被禁用(相对于调用setEnabled(false);)。
  • Qt::WA_DontShowOnScreen:不显示,相当于调用hide()。
  • Qt::WA_ForceUpdatesDisabled:禁用更新,即使其所有祖先都设置为启用更新状态,它仍将保持禁用状态。(相当于调用QWidget::setUpdatesEnabled())。
  • Qt::WA_Hover:当鼠标进入或离开小部件时,强制Qt生成绘制事件。此功能通常在实现自定义样式时使用。
  • Qt::WA_InputMethodEnabled:启用亚洲语言的输入法。创建自定义文本编辑小部件时必须设置。
  • Qt::WA_KeyboardFocusChange:当用户使用键盘(tab、backtab或快捷键)时更改焦点。用于顶层窗口设置。
  • Qt::WA_KeyCompression:如果设置则启用按键事件压缩,如果未设置则禁用它。默认情况下,按键压缩是关闭的,所以小部件每次按键都会收到按键事件。如果启用并且程序跟不上按键输入,Qt 可能会尝试压缩按键事件,以便在每个事件中可以处理多个字符。Qt 仅对可打印字符执行按键事件压缩。 Qt::Modifier 键、光标移动键、功能键和其他操作键(例如 Escape、Enter、Backspace、PrintScreen)将停止键事件压缩。
  • Qt::WA_LayoutOnEntireRect:小部件希望布局对整个QWidget::rect()操作,而不仅仅是在QWidget::contentsRect()上。
  • Qt::WA_LayoutUsesWidgetRect:使用 QLayout 布局小部件时,忽略样式中的布局项 rect。

以下代码在Mac运行生成的方块会重叠:

class MyButton : public QPushButton 
{
public:
  explicit MyButton(Qt::GlobalColor color, QWidget *parent = NULL)
    : QPushButton(parent), color_(color) 
    {
        setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
    }
    QSize sizeHint() const 
    {
        return QSize(50, 25);
    }
protected:
    void paintEvent(QPaintEvent *) 
    {
        QPainter painter(this);
        painter.setOpacity(0.5);
        painter.fillRect(0, 0, width(), height(), color_);
    }
private:
    Qt::GlobalColor color_;
};

int main(int argc, char **argv) 
{
    QApplication app(argc, argv);
    QWidget widget;
    QHBoxLayout *layout = new QHBoxLayout;
    layout->setSpacing(0);
    MyButton *w1 = new MyButton(Qt::red);
    MyButton *w2 = new MyButton(Qt::green);
    MyButton *w3 = new MyButton(Qt::blue);
    layout->addWidget(w1);
    layout->addWidget(w2);
    layout->addWidget(w3);
    widget.setLayout(layout);
    widget.show();
    return app.exec();
}

 

解决方式是布局中每项都加上:

    w1->setAttribute(Qt::WA_LayoutUsesWidgetRect);
    w2->setAttribute(Qt::WA_LayoutUsesWidgetRect);
    w3->setAttribute(Qt::WA_LayoutUsesWidgetRect);

  • Qt::WA_MouseNoMask:使小部件接收整个小部件的鼠标事件,而不考虑当前设置的掩码,覆盖QWidget::setMask()。这不适用于顶层窗口。
  • Qt::WA_MouseTracking:启用鼠标跟踪。
  • Qt::WA_NoChildEventsForParent:小部件不希望将ChildAddedChildRemoved事件发送到其父级。
  • Qt::WA_NoChildEventsFromChildren:小部件不希望接收从其子部件发送的ChildAddedChildRemoved事件。
  • Qt::WA_NoMousePropagation禁止将鼠标事件传播到小部件的父级。默认情况下禁用此属性。
  • Qt::WA_TransparentForMouseEvents将禁用向小部件及其子部件传递鼠标事件。默认情况下禁用此属性。
  • Qt::WA_NoSystemBackground:小部件没有背景,即当小部件接收到绘制事件时,背景不会自动重新绘制。窗口设置这个效果就是全黑。
  • Qt::WA_OpaquePaintEvent:小部件在接收到绘制事件时绘制其所有像素。因此,在生成绘制事件之前,不需要更新、调整大小、滚动和焦点更改等操作来擦除小部件。
  • Qt::WA_PaintUnclipped:使所有在此小部件上操作的QPainter释放。设置了Qt::WA_PaintOnScreen标志的小部件才支持此标志。
  • Qt::WA_OutsideWSRange:指示小部件在窗口系统坐标系的有效范围之外。超出有效范围的小部件无法映射到屏幕上。由 Qt 内核设置/清除。
  • Qt::WA_PaintUnclipped:使在此小部件上操作的所有QPainter对象的绘制都不裁剪(即QPainter设置裁剪区域无效)。此小部件的子部件或它前面的其他小部件不会剪裁QPainter可以在其上绘画的区域。只有设置了 Qt::WA_PaintOnScreen 标志的小部件才支持此标志。 以跨平台方式执行此操作的首选方法是创建一个位于其他小部件前面的透明小部件。
  • Qt::WA_PaintOnScreen:表示小部件要直接在屏幕上绘制。具有此属性集的小部件不参与组合管理,即它们不能是半透明的或通过半透明重叠小部件发光。它将禁用双缓冲。
  • Qt::WA_QuitOnClose:小部件作为最后一个接受closeEvent()时,使Qt退出应用程序。可以使用QApplication::quitOnLastWindowClosed属性修改此行为。默认情况下,该属性为Qt::Window类型的所有小部件设置。
  • Qt::WA_Resized:指示小部件具有明确的大小。该标志由 QWidget::resize() 和 QWidget::setGeometry() 设置或清除。

  • Qt::WA_RightToLeft:小部件的布局方向是从右向左。
  • Qt::WA_SetCursor:小部件有自己的光标。该标志由 QWidget::setCursor() 和 QWidget::unsetCursor() 设置或清除。
  • Qt::WA_SetFont:小部件有自己的字体。该标志由 QWidget::setFont() 设置或清除。
  • Qt::WA_SetPalette:小部件有自己的调色板。该标志由 QWidget::setPalette() 设置或清除。
  • Qt::WA_SetStyle:小部件有自己的样式。该标志由 QWidget::setStyle() 设置或清除。
  • Qt::WA_StaticContents:小部件改变大小时将重绘事件限制在之前没显示的部分。
  • Qt::WA_StyleSheet:使用样式表对小部件进行样式设置。在小部件受样式表约束时设置(即使设置的样式表不影响小部件外观)。
  • Qt::WA_StyleSheetTarget:小部件外观被样式表修改。Qt::WA_StyleSheet 也将被设置。
  • Qt::WA_TranslucentBackground:小部件应具有半透明背景,即小部件的任何非不透明区域将是半透明的,因为小部件将具有alpha通道。设置此标志会导致设置Qt::WA_NoSystemBackground。在Windows上,小部件还需要设置Qt::FramelessWindowHint 窗口标志。
  • Qt::WA_UnderMouse:小部件在鼠标光标下。该值在拖放操作期间未正确更新。QWidget::underMouse()是此属性的getter 函数。该标志由 Qt 内核设置或清除。

  • Qt::WA_WindowModified:窗口标记为已修改。在某些平台上,这个标志什么都不做,在其他平台上(包括 macOS 和 Windows),窗口将采用修改后的外观。 该标志由 QWidget::setWindowModified() 设置或清除。

  • Qt::WA_WindowPropagation:使顶层窗口从其父窗口继承字体、调色板和区域设置。
  • Qt::WA_MacAlwaysShowToolWindow:在 macOS 上,即使应用程序未处于活动状态,也显示工具窗口。默认情况下,当应用程序处于非活动状态时,所有工具窗口都是隐藏的。
  • Qt::WA_SetLocale:应该在小部件中考虑区域设置。
  • Qt::WA_StyledBackground:应该使用样式背景绘制小部件。
  • Qt::WA_ShowWithoutActivating:显示小部件而不激活它。
  • Qt::WA_NativeWindow:为小部件创建了(操作系统)原生窗口。 除非设置了 Qt::WA_DontCreateNativeAncestors,否则启用此标志还将为小部件的祖先强制使用原生窗口。
  • Qt::WA_DontCreateNativeAncestors:小部件的祖先保持非原生,即使小部件本身是原生的。
  • Qt::WA_AcceptTouchEvents:允许将触摸事件(QTouchEvent)发送到小部件。必须在所有可以处理触摸事件的小部件上设置。如果没有设置此属性,来自触摸设备的事件将作为鼠标事件发送。
  • Qt::WA_TouchPadAcceptSingleTouchEvents:允许将触摸板单点触摸事件发送到小部件。
  • Qt::WA_AlwaysStackOnTop:该值强制 QOpenGLWidget QQuickWidget 在其他小部件之上最后绘制。忽略其他类型的小部件。设置此属性会打破堆叠顺序(这时候可以使用半透明的OpenGL小部件,其下方可以看到其他小部件)。强烈建议在启用或禁用此属性后,在小部件的顶级窗口上调用update()。
  • Qt::WA_ContentsMarginsRespectsSafeArea:默认情况下,QWidget 通过将边距合并到其内容的边距中。这意味着,除非设置了 Qt::WA_LayoutOnEntireRect 属性,否则 QLayout 将使用小部件的内容区域进行布局。
  • 8
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值