Qt:使用样式表时QWidget的可见性状态

时间:2014-07-10 15:53:24

标签: qt stylesheet visibility

我定制了名为" MainWidget"的QWidget。以及一个名为" ChildWidget"的定制QWidget。 MainWidget是ChildWidget的父级,这些子小部件是动态创建的,并插入到MainWidget的小部件堆栈中。

我使用样式表在各自的.ui(表单)文件中设置MainWidget和ChildWidget的背景颜色。 选择小部件 - >右键单击小部件 - >更改样式表 - >选择背景颜色 - >申请 - >保存.ui文件

" background-color:;"

每个ChidlWidget都有自己独特的大小(宽度和高度),这样当它们堆叠在MainWidget的小部件堆栈上时,可能有一个小部件重叠其他小部件的机会,一些小部件完全被遮挡而一些小部件部分可见。

我试图找到所有类型小部件的可见性状态(模糊,完全可见,部分可见)。 我正在使用以下代码段。

void MainWidget::printVisibilityState()
{
    QList<ChildWidget *> childWidgetsList = findChildren<ChildWidget *>();

    for (register int i = 0;  i  < childWidgetsList.size();  i++)
    {
        ChildWidget* pWidget = childWidgetsList.at(i);

        QRegion visibleRegion = pWidget->visibleRegion();
        QRect visibleRegionBoundingRect = visibleRegion.boundingRect();
        int visibleRegionRectsCount = visibleRegion.rects().count();
        QRect widgetRect = pWidget->rect();

        if (visibleRegion.isEmpty()) {
            qDebug() <<pWidget->getName()<< "is OBSCURED";
        }
        else {
            if (
                (visibleRegionBoundingRect == widgetRect) && 
                    (1 == visibleRegionRectsCount)) 
            {
                qDebug() <<pWidget->getName()<< "is VISIBLE";
            }
            else 
            {
                qDebug() <<pWidget->getName()<< "is PARTIALLY VISIBLE";
            }
        }
    }
}

我在MainWidget和ChildWidget中使用以下代码片段实现了painEvent。

void ChildWidget::paintEvent(QPaintEvent *)
 {
     QStyleOption opt;
     opt.init(this);
     QPainter p(this);
     style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
 }

void MainWidget::paintEvent(QPaintEvent *)
 {
     QStyleOption opt;
     opt.init(this);
     QPainter p(this);
     style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
 }

此代码将所有子窗口小部件的可见性状态打印为VISIBLE。

注意:如果我对MainWidget和ChildWidget使用setAutoFillBackground(true),而不是使用样式表设置背景颜色,那么我将获得正确的可见性状态。

你能否指导我为什么在使用样式表时它没有给我正确的可见性状态? 我在计算可见性状态时遗漏了什么吗?

有没有其他方法可以获得可见性状态信息?

QWidget文档(http://qt-project.org/doc/qt-4.8/qwidget.html#visible-prop)表示,&#34;恰好被屏幕上的其他窗口遮挡的小部件被视为可见。&#34;

如果是这种情况我们如何确定部分可见小部件的可见性状态? (例如,在其他窗口上弹出错误,因此错误弹出窗口完全可见,窗口部分可见)

请帮帮我

此致

SRaju

0 个答案:

没有答案