gpt4 book ai didi

Qt - 几个 QTextBlock 内联

转载 作者:行者123 更新时间:2023-12-04 12:40:01 26 4
gpt4 key购买 nike

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

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

最佳答案

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

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

我在下面发布了一些代码,其中我有一个非常简单的对话框,其中只有一个 textedit(上面提到的派生类)。我创建了一个表格,在水平线上布置了三个文本块,并将它们的用户状态设置为列号。然后我只有重载的文本编辑类 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

dialog.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();

}

关于Qt - 几个 QTextBlock 内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12041341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com