Qt - 几个 QTextBlock 内联

2024-01-11

是否可以将 QTextDocument 中的多个 QTextBlock 排列在一根水平线上?

我需要知道单击了哪个文本块,并且 QTextBlock 很好用,因为它的方法 setUserState(int) 可以用来保存特定块的 id。有更好的方法吗?


不确定我是否正确回答了你的问题,但我正在尝试(在问题提出大约三年后......)

原则上你可以把QTextBlocks在水平线上使用QTextTable。如果您随后创建一个继承自的类QTextEdit您可以捕获鼠标事件并找出单击了哪个文本块。

我在下面发布了一些代码,其中有一个非常简单的对话框,其中只有一个文本编辑(上面提到的派生类)。我创建一个表格,在水平线上布置三个文本块,并将其用户状态设置为列号。然后我只有重载的文本编辑类mouseEvent只打印的方法userState将其所在的任何文本块添加到命令行中,只是为了展示原理。

让我知道这是否有任何帮助或者是否误解了您的问题。

dialog.h

#ifndef MYDIALOG_H
#define MYDIALOG_H

#include "ui_dialog.h"

class MyDialog : public QDialog, public Ui::Dialog
{
 public:
  MyDialog(QWidget * parent = 0, Qt::WindowFlags f = 0);
  void createTable();

};


#endif

对话框.cpp

#include "dialog.h"

#include <QTextTable>
#include <QTextTableFormat>

MyDialog::MyDialog(QWidget * parent, Qt::WindowFlags f) :
QDialog(parent,f)
{
  setupUi(this);
}

void MyDialog::createTable()
{
  QTextCursor cursor = textEdit->textCursor();

  QTextTableFormat tableFormat;
  tableFormat.setCellPadding(40);
  tableFormat.setBorderStyle(QTextFrameFormat::BorderStyle_None);

  QTextTable* table=cursor.insertTable(1,3,tableFormat);
  for( int col = 0; col < table->columns(); ++col ) {
    cursor = table->cellAt(0, col).firstCursorPosition();
    cursor.insertBlock();
    cursor.block().setUserState(col);
    cursor.insertText(QString("Block in Column ")+QString::number(col));
  }

}

mytextedit.h

#ifndef MYTEXTEDIT_H
#define MYTEXTEDIT_H

#include <QTextEdit>

class MyTextEdit : public QTextEdit
{
 public:
  MyTextEdit(QWidget * parent = 0);
  void mousePressEvent(QMouseEvent *event);
};
#endif

mytextedit.cpp

#include "mytextedit.h"

#include <QMouseEvent>
#include <QTextBlock>
#include <QtCore>

MyTextEdit::MyTextEdit(QWidget * parent) :
  QTextEdit(parent)
{

}

void MyTextEdit::mousePressEvent(QMouseEvent *event)
{
  if(event->button() == Qt::LeftButton) {
    qDebug() << this->cursorForPosition(event->pos()).block().userState();
  }
}

main.cpp(只是为了完整性)

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

int main(int argc, char** argv)
{
  QApplication app(argc,argv);
  MyDialog dialog;

  dialog.show();
  dialog.createTable();

  return app.exec();

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt - 几个 QTextBlock 内联 的相关文章

随机推荐