显示

时间:2017-03-31 09:31:57

标签: c++ css qt qwidget

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

    m_textEdit->setMaximumHeight(3 * RowHeight);

但它似乎永久固定。我希望在有焦点时让它更大。

我试过css

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

我尝试过在动作中调用的resize函数

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

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

我还想过,也许我可以把它放在一个可以调整大小的分割器布局中,但是控件并没有随着窗口大小而扩展。

任何想法?

2 个答案:

答案 0 :(得分:1)

您可以根据焦点动态更改小部件大小。当它输入时,使尺寸更大。当它离开时,缩小尺寸。

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

CSS改变不是你的情况,也不是调整大小。

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

由您决定使用QWidget :: setFixedXXX或某些QWidget :: setMaximumXXX,QWidget :: setMinimumXXX方法设置大小的策略。我喜欢固定版,但它实际上取决于您的应用程序样式和布局上下文。

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

答案 1 :(得分:0)

我最终这样做的方法是在表单中添加QLabel和QTextEdit,然后我右键单击表单和布局 - >'打破布局' (为什么,我不知道!),然后我选择两个窗口小部件并将它们添加到垂直分割器布局(通过右键单击窗体和布局 - >'垂直分割器')。然后我右键单击表单并添加一个垂直布局,然后将所有重要布局设置为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);
}

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