1

我对 QT 很陌生,我创建了一个 GUI 应用程序,它具有以下代码:

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

主文件

#include "mainwindow.h"
#include <QApplication>

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

    return a.exec();
}

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

MainWindow::~MainWindow()
{
    delete ui;
}

使用设计器,我在表单布局中创建了一个 textEdit。当我在 textEdit 中有太多内容时,它会创建一个滚动条,而不是根据内容调整大小。

我像疯了一样用谷歌搜索,但我找到的所有答案都超出了我的水平,所以我根本不明白。我非常想实现这一点,因为这是我的 gui 的核心。

提前致谢

4

1 回答 1

0

没有标准的方法可以做到这一点。这是我的解决方法:

标题:

class Text_edit_auto_height : public QObject {
  Q_OBJECT
public:
  explicit Text_edit_auto_height(QTextEdit* edit);

private:
  QTextEdit* _edit;
  bool eventFilter(QObject* object, QEvent* event);

  QTimer timer;

private slots:
  void update_height();

};

资源:

#include "Text_edit_auto_height.h"
#include <QEvent>

Text_edit_auto_height::Text_edit_auto_height(QTextEdit* edit) :
  QObject(edit)
, _edit(edit)
{
  connect(edit->document(), SIGNAL(contentsChanged()), this, SLOT(update_height()));
  update_height();
  edit->installEventFilter(this);
  connect(&timer, SIGNAL(timeout()), this, SLOT(update_height()));
  timer.start(500);
}

bool Text_edit_auto_height::eventFilter(QObject *object, QEvent *event) {
  if (event->type() == QEvent::Resize) {
    update_height();
  }
  return false;
}

void Text_edit_auto_height::update_height() {
  _edit->setFixedHeight(_edit->document()->size().height() + 5);
}

用法:把它放在构造函数中:

new Text_edit_auto_height(ui->list);
于 2013-10-13T23:12:16.150 回答