首页 > 其他 > 详细

qt 如何使用私有类?

时间:2019-10-24 13:29:48      阅读:425      评论:0      收藏:0      [点我收藏+]

在模块后面加上 -private 关键字,例如 widgets-private 然后 qmake 让配置文件运行一下。

在使用 QStackedLayout 布局并设置 QStackedLayout::StackAll 模式,且没有设置 QStackedLayout 父对象,则会默认显示最后一个元素,但内部下标还是 0,即栈底

// 添加元素
int QStackedLayout::addWidget(QWidget *widget)
{
    Q_D(QStackedLayout);
    return insertWidget(d->list.count(), widget);
}

int QStackedLayout::insertWidget(int index, QWidget *widget)
{
    Q_D(QStackedLayout);
    addChildWidget(widget);
    index = qMin(index, d->list.count());
    if (index < 0)
        index = d->list.count();
    QWidgetItem *wi = QLayoutPrivate::createWidgetItem(this, widget);
    d->list.insert(index, wi);
    invalidate();
    if (d->index < 0) {
        setCurrentIndex(index);
    } else {
        if (index <= d->index)
            ++d->index;
        if (d->stackingMode == StackOne)//判断显示模式
            widget->hide();
        widget->lower();//元素沉底
    }
    return index;
}

void QWidget::lower()
{
    Q_D(QWidget);
    if (!isWindow()) {//判断是否是 window 类型,这里不走这里
        QWidget *p = parentWidget();
        const int parentChildCount = p->d_func()->children.size();
        if (parentChildCount < 2)
            return;
        const int from = p->d_func()->children.indexOf(this);
        Q_ASSERT(from >= 0);
        // Do nothing if the widget is already in correct stacking order _and_ created.
        if (from != 0)
            p->d_func()->children.move(from, 0);
        if (!testAttribute(Qt::WA_WState_Created) && p->testAttribute(Qt::WA_WState_Created))
            create();
        else if (from == 0)
            return;
    }
    if (testAttribute(Qt::WA_WState_Created))
        d->lower_sys();//进入这里

    if (d->extra && d->extra->hasWindowContainer)
        QWindowContainer::parentWasLowered(this);

    QEvent e(QEvent::ZOrderChange);
    QApplication::sendEvent(this, &e);
}

void QWidgetPrivate::lower_sys()
{
    Q_Q(QWidget);
    if (q->isWindow() || q->testAttribute(Qt::WA_NativeWindow)) {
        Q_ASSERT(q->testAttribute(Qt::WA_WState_Created));
        q->windowHandle()->lower();
    } else if (QWidget *p = q->parentWidget()) {//判断父元素是否为空,上面问题因为没带入父指针,所以这里元素并没有进行沉底操作,所以才会出现上面那种情况.
        setDirtyOpaqueRegion();
        p->d_func()->invalidateBuffer(effectiveRectFor(q->geometry()));
    }
}

qt 如何使用私有类?

原文:https://www.cnblogs.com/cheungxiongwei/p/11731566.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!