【问题标题】:How to resize QPlainTextEdit widget when displayed显示时如何调整 QPlainTextEdit 小部件的大小
【发布时间】:2017-08-25 12:34:35
【问题描述】:

我有一个 QT GUI 应用程序,它有一个垂直布局,所有控件都展开以填充布局。如果我将 QTextBox 添加到布局中,它具有固定大小(太大),我可以在设计器或代码中(在 MainWindow 构造函数中)更改它

    m_textEdit->setMaximumHeight(3 * RowHeight);

但它似乎是永久修复的。当它有焦点时,我想把它做得更大。

我试过css

  m_textEdit->setStyleSheet("QPlainTextEdit:focus{max-height: 400px}");

我已经尝试过在动作中调用的调整大小函数

  m_textEdit->resize(m_textEdit->width(), 3 * RowHeight);

一旦显示也不会调整大小。

我还想也许我可以把它放在一个拆分器布局中,然后可以调整大小,但是控件不会随着窗口大小而扩展。

有什么想法吗?

【问题讨论】:

  • 你试过垂直间隔和设置垂直间隔的高度吗?它会解决你一半的问题
  • 按照我的理解,当旁边没有其他小部件时,间隔将小部件推到表单的边缘。在这种情况下,小部件会占用所有可用空间并随对话框展开
  • 所以我尝试将拆分器布局放在垂直布局中,但是我无法更改垂直布局大小,奇怪!

标签: c++ css qt qwidget


【解决方案1】:

您可以根据焦点动态更改小部件的大小。输入后,将尺寸变大。剩下的时候,把尺寸变小。

有多种方法可以做到这一点。在我看来,更清洁和更简单的方法是在你的小部件上安装一个事件过滤器。 在此事件过滤器中,您将处理 QEvent::FocusIn 和 QEvent::FocusOut 以更改小部件的大小。

在您的情况下,CSS 更改不是要走的路,调整大小也不是。

更方便的方法是使用最小值、固定、最大值来更改宽度/高度)。

如果您想使用 QWidget::setFixedXXX 或某些 QWidget::setMaximumXXX、QWidget::setMinimumXXX 方法设置大小,则由您决定。我喜欢 Fixed 的,但这实际上取决于您的应用程序样式和布局上下文。

关于事件过滤器的官方文档:(http://doc.qt.io/qt-5/qobject.html#installEventFilter)。

【讨论】:

  • 问题是大小没有变化,处理焦点事件是另一回事,不是主要问题,但感谢提供有用的信息
【解决方案2】:

我最后这样做的方法是在表单中添加一个QLabel和一个QTextEdit,然后我右键点击form and layout->'break layout'(为什么,我不知道!),然后我选择两个小部件并将它们添加到垂直拆分器布局(通过右键单击表单和布局->'垂直拆分器')。然后我右键单击窗体并添加一个垂直布局,然后将所有重要的布局设置为 MainWidget 并让控件随窗口大小缩放(红色警告图标从 mainwidget 中消失)。要在启动时获得我想要的垂直比例,我还必须添加以下代码

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QList<int> sizes;
    sizes << 1000 <<  1;
    ui->splitter->setStretchFactor(0,1000);
    ui->splitter->setStretchFactor(1,1);
}

我还必须将尺寸策略设置为扩展小部件(不确定是否需要)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 2011-08-29
    相关资源
    最近更新 更多