⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qdockarealayout.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
            child.subinfo = 0;            tmp->item_list.clear();            delete tmp;        }    }}void QDockAreaLayoutInfo::remove(QList<int> path){    Q_ASSERT(!path.isEmpty());    if (path.count() > 1) {        int index = path.takeFirst();        QDockAreaLayoutItem &item = item_list[index];        Q_ASSERT(item.subinfo != 0);        item.subinfo->remove(path);        unnest(index);    } else {        int index = path.first();        item_list.removeAt(index);    }}QLayoutItem *QDockAreaLayoutInfo::plug(QList<int> path){    Q_ASSERT(!path.isEmpty());    int index = path.takeFirst();    if (index < 0)        index = -index - 1;    if (!path.isEmpty()) {        const QDockAreaLayoutItem &item = item_list.at(index);        Q_ASSERT(item.subinfo != 0);        return item.subinfo->plug(path);    }    QDockAreaLayoutItem &item = item_list[index];    Q_ASSERT(item.widgetItem != 0);    Q_ASSERT(item.gap);    item.gap = false;    QRect result;#ifndef QT_NO_TABBAR    if (tabbed) {    } else#endif    {        int prev = this->prev(index);        int next = this->next(index);        if (prev != -1 && !item_list.at(prev).gap) {            item.pos += sep;            item.size -= sep;        }        if (next != -1 && !item_list.at(next).gap)            item.size -= sep;        QPoint pos;        rpick(o, pos) = item.pos;        rperp(o, pos) = perp(o, rect.topLeft());        QSize s;        rpick(o, s) = item.size;        rperp(o, s) = perp(o, rect.size());        result = QRect(pos, s);    }    return item.widgetItem;}QLayoutItem *QDockAreaLayoutInfo::unplug(QList<int> path){    Q_ASSERT(!path.isEmpty());    if (path.count() > 1) {        int index = path.takeFirst();        const QDockAreaLayoutItem &item = item_list.at(index);        Q_ASSERT(item.subinfo != 0);        return item.subinfo->unplug(path);    }    int index = path.first();    QDockAreaLayoutItem &item = item_list[index];    int prev = this->prev(index);    int next = this->next(index);    Q_ASSERT(!item.gap);    item.gap = true;#ifndef QT_NO_TABBAR    if (tabbed) {    } else#endif    {        if (prev != -1 && !item_list.at(prev).gap) {            item.pos -= sep;            item.size += sep;        }        if (next != -1 && !item_list.at(next).gap)            item.size += sep;    }    return item.widgetItem;}#ifndef QT_NO_TABBARquintptr QDockAreaLayoutInfo::currentTabId() const{    if (!tabbed || tabBar == 0)        return 0;    int index = tabBar->currentIndex();    if (index == -1)        return 0;    return qvariant_cast<quintptr>(tabBar->tabData(index));}void QDockAreaLayoutInfo::setCurrentTab(QWidget *widget){    setCurrentTabId(reinterpret_cast<quintptr>(widget));}void QDockAreaLayoutInfo::setCurrentTabId(quintptr id){    if (!tabbed || tabBar == 0)        return;    for (int i = 0; i < tabBar->count(); ++i) {        if (qvariant_cast<quintptr>(tabBar->tabData(i)) == id) {            tabBar->setCurrentIndex(i);            return;        }    }}#endif // QT_NO_TABBARstatic QRect dockedGeometry(QWidget *widget){    int titleHeight = 0;    QDockWidgetLayout *layout        = qobject_cast<QDockWidgetLayout*>(widget->layout());    if(layout != 0 && layout->nativeWindowDeco())        titleHeight = layout->titleHeight();    QRect result = widget->geometry();    result.adjust(0, -titleHeight, 0, 0);    return result;}bool QDockAreaLayoutInfo::insertGap(QList<int> path, QLayoutItem *dockWidgetItem){    Q_ASSERT(!path.isEmpty());    bool insert_tabbed = false;    int index = path.takeFirst();    if (index < 0) {        insert_tabbed = true;        index = -index - 1;    }//    dump(qDebug() << "insertGap() before:" << index << tabIndex, *this, QString());    if (!path.isEmpty()) {        QDockAreaLayoutItem &item = item_list[index];        if (item.subinfo == 0#ifndef QT_NO_TABBAR            || item.subinfo->tabbed && !insert_tabbed#endif            ) {            // this is not yet a nested layout - make it            QDockAreaLayoutInfo *subinfo = item.subinfo;            QLayoutItem *widgetItem = item.widgetItem;            QRect r = subinfo == 0 ? dockedGeometry(widgetItem->widget()) : subinfo->rect;            Qt::Orientation opposite = o == Qt::Horizontal ? Qt::Vertical : Qt::Horizontal;#ifdef QT_NO_TABBAR            const int tabBarShape = 0;#endif            QDockAreaLayoutInfo *new_info                = new QDockAreaLayoutInfo(sep, dockPos, opposite, tabBarShape, mainWindow);            item.subinfo = new_info;            item.widgetItem = 0;            QDockAreaLayoutItem new_item                = widgetItem == 0                    ? QDockAreaLayoutItem(subinfo)                    : QDockAreaLayoutItem(widgetItem);            new_item.size = pick(opposite, r.size());            new_item.pos = pick(opposite, r.topLeft());            new_info->item_list.append(new_item);#ifndef QT_NO_TABBAR            if (insert_tabbed) {                new_info->tabbed = true;            }#endif        }        bool result = item.subinfo->insertGap(path, dockWidgetItem);        return result;    }    // create the gap item    QDockAreaLayoutItem gap_item;    gap_item.gap = true;    gap_item.widgetItem = dockWidgetItem;   // so minimumSize(), maximumSize() and                                            // sizeHint() will work#ifndef QT_NO_TABBAR    if (!tabbed)#endif    {        int prev = this->prev(index);        int next = this->next(index - 1);        // find out how much space we have in the layout        int space = 0;        if (isEmpty()) {            // I am an empty dock area, therefore I am a top-level dock area.            switch (dockPos) {                case QInternal::LeftDock:                case QInternal::RightDock:                    if (o == Qt::Vertical) {                        // the "size" is the height of the dock area (remember we are empty)                        space = pick(Qt::Vertical, rect.size());                    } else {                        space = pick(Qt::Horizontal, dockWidgetItem->widget()->size());                    }                    break;                case QInternal::TopDock:                case QInternal::BottomDock:                default:                    if (o == Qt::Horizontal) {                        // the "size" is width of the dock area                        space = pick(Qt::Horizontal, rect.size());                    } else {                        space = pick(Qt::Vertical, dockWidgetItem->widget()->size());                    }                    break;            }        } else {            for (int i = 0; i < item_list.count(); ++i) {                const QDockAreaLayoutItem &item = item_list.at(i);                if (item.skip())                    continue;                Q_ASSERT(!item.gap);                space += item.size - pick(o, item.minimumSize());            }        }        // find the actual size of the gap        int gap_size = 0;        int sep_size = 0;        if (isEmpty()) {            gap_size = space;            sep_size = 0;        } else {            QRect r = dockedGeometry(dockWidgetItem->widget());            gap_size = pick(o, r.size());            if (prev != -1 && !item_list.at(prev).gap)                sep_size += sep;            if (next != -1 && !item_list.at(next).gap)                sep_size += sep;        }        if (gap_size + sep_size > space)            gap_size = pick(o, gap_item.minimumSize());        gap_item.size = gap_size + sep_size;    }    // finally, insert the gap    item_list.insert(index, gap_item);//    dump(qDebug() << "insertGap() after:" << index << tabIndex, *this, QString());    return true;}QDockAreaLayoutInfo *QDockAreaLayoutInfo::info(QWidget *widget){    for (int i = 0; i < item_list.count(); ++i) {        const QDockAreaLayoutItem &item = item_list.at(i);        if (item.skip())            continue;#ifndef QT_NO_TABBAR        if (tabbed && widget == tabBar)            return this;#endif        if (item.widgetItem != 0 && item.widgetItem->widget() == widget)            return this;        if (item.subinfo != 0) {            if (QDockAreaLayoutInfo *result = item.subinfo->info(widget))                return result;        }    }    return 0;}QDockAreaLayoutInfo *QDockAreaLayoutInfo::info(QList<int> path){    int index = path.takeFirst();    if (index < 0)        index = -index - 1;    if (index >= item_list.count())        return this;    if (path.isEmpty() || item_list.at(index).subinfo == 0)        return this;    return item_list.at(index).subinfo->info(path);}QRect QDockAreaLayoutInfo::itemRect(int index) const{    const QDockAreaLayoutItem &item = item_list.at(index);    if (item.skip())        return QRect();    QRect result;#ifndef QT_NO_TABBAR    if (tabbed) {        if (tabId(item) == currentTabId())            result = tabContentRect();    } else#endif    {        QPoint pos;        rpick(o, pos) = item.pos;        rperp(o, pos) = perp(o, rect.topLeft());        QSize s;        rpick(o, s) = item.size;        rperp(o, s) = perp(o, rect.size());        result = QRect(pos, s);    }    return result;}QRect QDockAreaLayoutInfo::itemRect(QList<int> path) const{    Q_ASSERT(!path.isEmpty());    if (path.count() > 1) {        const QDockAreaLayoutItem &item = item_list.at(path.takeFirst());        Q_ASSERT(item.subinfo != 0);        return item.subinfo->itemRect(path);    }    return itemRect(path.first());}QRect QDockAreaLayoutInfo::separatorRect(int index) const{#ifndef QT_NO_TABBAR    if (tabbed)        return QRect();#endif    const QDockAreaLayoutItem &item = item_list.at(index);    if (item.skip())        return QRect();    QPoint pos = rect.topLeft();    rpick(o, pos) = item.pos + item.size;    QSize s = rect.size();    rpick(o, s) = sep;    return QRect(pos, s);}QRect QDockAreaLayoutInfo::separatorRect(QList<int> path) const{    Q_ASSERT(!path.isEmpty());    if (path.count() > 1) {        const QDockAreaLayoutItem &item = item_list.at(path.takeFirst());        Q_ASSERT(item.subinfo != 0);        return item.subinfo->separatorRect(path);    }    return separatorRect(path.first());}QList<int> QDockAreaLayoutInfo::findSeparator(const QPoint &_pos) const{#ifndef QT_NO_TABBAR    if (tabbed)        return QList<int>();#endif    int pos = pick(o, _pos);    for (int i = 0; i < item_list.size(); ++i) {        const QDockAreaLayoutItem &item = item_list.at(i);        if (item.skip() || item.gap)            continue;        if (item.pos + item.size > pos) {            if (item.subinfo != 0) {                QList<int> result = item.subinfo->findSeparator(_pos);                if (!result.isEmpty()) {                    result.prepend(i);                    return result;                } else {                    return QList<int>();                }            }        }        int next = this->next(i);        if (next == -1 || item_list.at(next).gap)            continue;        if (pos > item.pos + item.size && item.pos + item.size + sep > pos) {            QList<int> result;            result.append(i);            return result;        }    }    return QList<int>();}QList<int> QDockAreaLayoutInfo::indexOf(QWidget *widget) const{    for (int i = 0; i < item_list.size(); ++i) {        const QDockAreaLayoutItem &item = item_list.at(i);        if (item.subinfo != 0) {            QList<int> result = item.subinfo->indexOf(widget);            if (!result.isEmpty()) {                result.prepend(i);                return result;            }            continue;        }        if (!item.gap && item.widgetItem->widget() == widget) {            QList<int> result;            result << i;            return result;        }    }    return QList<int>();}QMainWindowLayout *QDockAreaLayoutInfo::mainWindowLayout() const{    QMainWindowLayout *result = qobject_cast<QMainWindowLayout*>(mainWindow->layout());    Q_ASSERT(result != 0);    return result;}void QDockAreaLayoutInfo::apply(bool animate){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -