标签: qscrollarea

添加小部件后 QScrollArea 不会滚动到最大值

我的设置如下所示:

Main Window
  |- QHBoxLayout
       |- Some Widgets
       |- QScrollArea
       |    |- QHBoxLayout
       |         |- QGridLayout
       |              |- Widgets dynamically loaded in at runtime
       |         |- QVBoxLayout
       |- Some Widgets
Run Code Online (Sandbox Code Playgroud)

添加小部件后,我希望滚动区域完全向下滚动。我这样做了:

this->ui->gridLayout_table->addWidget(/*Widget*/); // this works perfectly nice
this->ui->gridLayout_table->addWidget(/*Widget*/); // this also works perfectly nice
this->ui->scrollArea->verticalScrollBar()->setValue(this->ui->scrollArea->verticalScrollBar()->maximum());
Run Code Online (Sandbox Code Playgroud)

在最后一个命令中,它滚动到最大值减去新添加的小部件的高度。有没有办法在滚动之前刷新更改?

提前致谢 卢卡斯

layout qt4 qscrollarea

6
推荐指数
2
解决办法
3385
查看次数

更新动态QGridLayout - Python PyQt

我最近开始学习Python,现在我正在使用PyQt库制作一个带有GUI的软件.

这是我的问题:我创建了一个Scrollarea,我在这个scrollarea中添加了一个包含QGridLayout的小部件.

    sa = QtGui.QScrollArea()
    sa_widget = QtGui.QWidget()
    self.sa_grid.setSizeConstraint(QtGui.QLayout.SetMinAndMaxSize)
    sa_widget.setLayout(self.sa_grid)
    sa.setWidgetResizable(True)
    sa.setWidget(sa_widget)
Run Code Online (Sandbox Code Playgroud)

然后我添加了10个QLabel(当然这只是一个例子,在这个例子中我使用QGridLayout就像一个垂直布局):

    i = 0
    while i<100:
        i = i +1
        add = QtGui.QLabel("Row %i" % i)
        self.sa_grid.addWidget(add)
Run Code Online (Sandbox Code Playgroud)

然后我创建一个调用函数"function_name"的按钮,我希望这个函数删除一行,到目前为止这是我写的:

    tmp = QtGui.QWidget()
    tmp = self.sa_grid.itemAt(0)
    self.sa_grid.removeItem(tmp)
Run Code Online (Sandbox Code Playgroud)

它删除了第一行,gridlayout的每一行都变成了行x-1,但是,它没有删除文本"Row 1",所以我在同一行看到"Row 0"和"Row 1".

有人可以帮帮我吗?

提前感谢,Davide

python layout pyqt qscrollarea qgridlayout

5
推荐指数
1
解决办法
2713
查看次数

QScrollArea小部件未随Flowlayout扩展

我有一个带有QScrollArea小部件的ui 。在QScrollArea使用的FlowLayout。我的问题是,当我将小部件添加到布局中时,滚动区域开始滚动并且在有扩展空间时不会扩展。我希望在滚动条首先出现之前将滚动区域扩展到其极限。

如何在滚动条出现之前扩大滚动区域?

c++ qt flowlayout qscrollarea

5
推荐指数
1
解决办法
1874
查看次数

使QTreeView自动调整大小为内容

我正在尝试QTreeView自动调整其内容的大小.这是我的设置:我想创建一个"智能"工具提示这是一个QWidgetQt.Tool | Qt.FramelessWindowHint作为WindowFlags,这很好地工作.它包含一些布局,其中包含一些按钮(大小不变)和QTreeView.现在,无论何时将线条添加到QTreeView模型中,QTreeView都应自动增加其大小以避免垂直滚动条.

设置QSizePolicy.Expanding工具提示小部件和QTreeView没有改变任何东西 - 也许我在这里缺少一些额外的标志或东西.

我也试过以下,蛮力方法:

class ToolTip:
    def __init__(self):
        ...
        self.itemView.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel)
        self.itemView.verticalScrollBar().rangeChanged.connect(self.resizeViewVertically)

    def resizeViewVertically(self, min, max):
        self.resize(self.width(), self.height() + max)
Run Code Online (Sandbox Code Playgroud)

大部分时间都有效,但并非总是如此.每隔一段时间(每隔一段时间,确切地说,但我不知道这是否是巧合),使用此代码,视图正确调整大小(即所有内容都适合,并且不需要滚动条),但滚动条不会消失,允许滚动到最后一行下方的空白区域.

resize pyqt qtreeview qscrollarea

5
推荐指数
1
解决办法
1704
查看次数

PyQt:在运行时向滚动区域添加小部件

我试图在运行时通过按下按钮来添加新的小部件(在下面的示例中我使用标签)。这里是例子:

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Widget(QWidget):

    def __init__(self, parent= None):
        super(Widget, self).__init__()

        btn_new = QPushButton("Append new label")
        self.connect(btn_new, SIGNAL('clicked()'), self.add_new_label)

        #Container Widget       
        self.widget = QWidget()
        #Layout of Container Widget
        layout = QVBoxLayout(self)
        for _ in range(20):
            label = QLabel("test")
            layout.addWidget(label)
        self.widget.setLayout(layout)

        #Scroll Area Properties
        scroll = QScrollArea()
        scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        scroll.setWidgetResizable(False)
        scroll.setWidget(self.widget)

        #Scroll Area Layer add
        vLayout = QVBoxLayout(self)
        vLayout.addWidget(btn_new)
        vLayout.addWidget(scroll)
        self.setLayout(vLayout)

    def add_new_label(self):
        label = QLabel("new")
        self.widget.layout().addWidget(label)


if __name__ == '__main__':
    app = …
Run Code Online (Sandbox Code Playgroud)

qt resize pyqt qlabel qscrollarea

5
推荐指数
1
解决办法
1万
查看次数

问:如何确定QScrollArea中的小部件是否可见?

有人建议我重新实现QWheelEvent处理程序并检查每个子窗口小部件visibleRegion是否为0.

还有更好的建议吗?

c++ qt qscrollarea

5
推荐指数
1
解决办法
4842
查看次数

QScrollArea与QWidget和QVBoxLayout无法正常工作

所以我有这个QFrame是父窗口小部件(this在代码中表示).在这个小部件中,我想QWidget从顶部放置一个10 px(从底部放置10 px,因此它的高度为140px,而父级为160px).在QWidget将具有多个在其内部自定义按钮在垂直布局,在滚动区域,使得当按钮组合的高度超过QWidget's在自动高度(140px),滚动集.由于滚动不是针对整个父窗口小部件,而是针对子窗口小部件,因此滚动应仅适用于此处的子窗口小部件.这是我的代码:

//this is a custom button class with predefined height and some formatting styles
class MyButton: public QPushButton
{

public:
    MyButton(std::string aText, QWidget *aParent);

};

MyButton::MyButton(std::string aText, QWidget *aParent): QPushButton(QString::fromStdString(aText), aParent)
{
    this->setFixedHeight(30);
    this->setCursor(Qt::PointingHandCursor);
    this->setCheckable(false);
    this->setStyleSheet("background: rgb(74,89,98);   color: black; border-radius: 0px; text-align: left; padding-left: 5px; border-bottom: 1px solid black;");
}

//this is where I position the parent widget first, and then add sub widget
this->setGeometry(x,y,width,160);
this->setStyleSheet("border-radius: 5px; background:red;"); …
Run Code Online (Sandbox Code Playgroud)

c++ qt qwidget qscrollarea qframe

5
推荐指数
1
解决办法
9024
查看次数

如何将 QTableView 滚动条位置更改为标题下方?

如何更改滚动条位置从旁边到标题

在此输入图像描述

到下面的标题?

在此输入图像描述

任何如何实现这一点的想法都值得赞赏。

qt qtableview qscrollarea qt5

5
推荐指数
1
解决办法
1707
查看次数

如何调整 QTextEdit 以适应其内容

我正在开发一个 Qt 应用程序,我试图找到一种方法来使用 QTextEdit 作为label没有滚动条的长文本。在我的 ui 中,我有一个QScrollArea,在它里面我想放置几个QTextEdit小部件,我只想在里面使用滚动QScrollArea。问题是,无论我如何尝试调整大小,QTextEdit它似乎都有最大高度和文本剪切,即使我手动设置大小并QTextEdit::size返回正确的值。

我做了同样的事情,QLabel它工作正常,但在这种情况下,我需要一些仅在QTextEdit.

我找到了这篇文章: 调整 QT 的 QTextEdit 以匹配文本高度:maximumViewportSize()

给出的答案如下:

我已经解决了这个问题。为了让它工作,我必须做两件事:

  1. 向上走小部件层次结构并确保所有大小策略都有意义,以确保如果任何子小部件想要变大/变小,那么父小部件将希望成为相同的东西。
  2. 这是修复的主要来源。事实证明,由于 QTextEdit 位于 QScrollArea 中的主要小部件 QFrame 内,因此 QScrollArea 有一个约束,除非“widgetResizable”属性为真,否则它不会调整内部小部件的大小。文档在这里:http : //doc.qt.io/qt-4.8/qscrollarea.html#widgetResizable-prop. 在我尝试使用此设置并使其工作之前,文档对我来说并不清楚。从文档来看,这个属性似乎只处理主滚动区域想要调整小部件大小的时间(即从父滚动到子滚动)。这实际上意味着如果滚动区域中的主要小部件想要调整大小(即从子到父),则必须将此设置设置为 true。因此,故事的寓意是 QTextEdit 代码在覆盖 sizeHint 方面是正确的,但 QScrollArea 忽略了从主框架的 sizeHint 返回的值。

问题是我不知道如何访问QTextEdit's QScrollArea以启用widgetResizable. 任何人都可以解释我如何实现这一目标或建议一种不同的调整大小QTextEdit以完全适合其内容的方法吗?

c++ qt resize qtextedit qscrollarea

5
推荐指数
1
解决办法
1万
查看次数

在 QScrollArea pyqt 中滚动

如何自动滚动滚动区域?例如,当有新的更新而不是滚动区域的视图保持不变时,我想使用新文本继续下去。可以将其视为在 CMD 控制台中,当您键入命令时,它会随输出一起自动滚动。

python scroll pyqt qtextedit qscrollarea

4
推荐指数
1
解决办法
6842
查看次数