小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

c – 如何使Qt子小部件高度相等?

 印度阿三17 2019-09-02

我在一個(gè)QWidget中有一些QDockWidgets(不浮動(dòng),只能關(guān)閉).
我在每個(gè)QDockWidget中都有一些小部件 – 它們的高度應(yīng)該相等.
可以通過上下文菜單隱藏這些內(nèi)部小部件.

我的內(nèi)部小部件應(yīng)該具有相同的高度.我是這樣做的:

void MyDocksPanel::redistributeSpace()
{
    QBoxLayout * lay = (QBoxLayout *)layout();
    for (int i = 0; i < lay->count(); i  )
    {
        QWidget * dock = lay->itemAt(i)->widget();
        if (dock == NULL)
            continue;

        int size = 0;
        foreach(QWidget * subWidget, dock->findChildren<QWidget*>())
            size  = subWidget->isVisible() ? 1 : 0;

        if (dock->isVisible() && (size == 0))
            dock->hide();
        lay->setStretch(i, size);
    }
}

一切正常,直到我為每個(gè)QDockWidget添加一些const元素:一些水平滾動(dòng)條和一些標(biāo)簽……現(xiàn)在我的內(nèi)部小部件有不同的大小.但是我必須將他們的高度設(shè)置得非常平等.

QLayout在小部件層次結(jié)構(gòu)的一個(gè)級(jí)別上布局小部件大小.如何制作高度相等的子小部件?

3個(gè)子小部件與2個(gè)子部件

我設(shè)置第3和第2段的第一個(gè)策略:

但是,當(dāng)我添加滾動(dòng)條時(shí):

我的5個(gè)小部件的高度等于37,37,37,28,28 ……這就是問題所在

解決方法:

你有關(guān)于拉伸因子的正確軌跡,但請(qǐng)考慮像素值而不是小比例.嘗試將每個(gè)??看翱谛〔考纳煺挂蜃釉O(shè)置為:

dockWidgetStretch = numChildWidgets * childWidgetMinimumHeight   scrollBarHeight;

其中childWidgetMinimumHeight和scrollBarHeight都以像素表示,并且都是常量.

編輯:這是一個(gè)工作的例子.您可能需要進(jìn)行一些實(shí)驗(yàn)才能使其與您的程序一起使用,但這應(yīng)該是一個(gè)好的開始.

header.h

#include <QtGui>

class WidgetWith3Children : public QWidget
{
public:
    WidgetWith3Children()
    {
        QTextEdit *edit1 = new QTextEdit;
        QTextEdit *edit2 = new QTextEdit;
        QTextEdit *edit3 = new QTextEdit;
        QScrollBar *scrollBar = new QScrollBar(Qt::Horizontal);
        QVBoxLayout *layout = new QVBoxLayout;
        layout->addWidget(edit1);
        layout->addWidget(edit2);
        layout->addWidget(edit3);
        layout->addWidget(scrollBar);
        setLayout(layout);
    }
};

class WidgetWith2Children : public QWidget
{
public:
    WidgetWith2Children()
    {
        QTextEdit *edit1 = new QTextEdit;
        QTextEdit *edit2 = new QTextEdit;
        QScrollBar *scrollBar = new QScrollBar(Qt::Horizontal);
        QVBoxLayout *layout = new QVBoxLayout;
        layout->addWidget(edit1);
        layout->addWidget(edit2);
        layout->addWidget(scrollBar);
        setLayout(layout);
    }
};

class OuterWidget : public QWidget
{
public:
    OuterWidget()
    {
        QDockWidget *dockWidget1 = new QDockWidget;
        QDockWidget *dockWidget2 = new QDockWidget;
        dockWidget1->setWidget(new WidgetWith3Children);
        dockWidget2->setWidget(new WidgetWith2Children);
        QVBoxLayout *layout = new QVBoxLayout;

        // 71 is the height of the minimum size hint for QTextEdit
        // 30 is the height of a horizontal scrollbar (on my system)
        layout->addWidget(dockWidget1, 71 * 3   30);
        layout->addWidget(dockWidget2, 71 * 2   30);

        layout->setMargin(0);
        setLayout(layout);
    }
};

main.cpp中

#include <QtGui/QApplication>
#include "header.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    OuterWidget w;
    w.show();

    return a.exec();
}
來源:https://www./content-4-434351.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多