• 16802阅读
  • 14回复

QTextEdit中,怎样获得鼠标点击处的行数和字符在该行的位置?? [复制链接]

上一主题 下一主题
离线jedychen
 

只看楼主 倒序阅读 楼主  发表于: 2007-02-16
— 本帖被 XChinux 执行加亮操作(2009-01-06) —
使用mousePressEvent( QMouseEvent * e )
e->position()得到的是什么??
点击第二行第三个字符(和第四个字符的中间),怎么样知道 line=2 pos=3??
离线stdjgwyc
只看该作者 1楼 发表于: 2008-12-23
这个问题还没解决~~~~~~~~
QT交流群群号:2906359,(200人大群,持续升级)
离线songxizg

只看该作者 2楼 发表于: 2008-12-24
textEdit->textCursor();
貌似是这个
离线lazybone
只看该作者 3楼 发表于: 2008-12-24
昨天下班前给你试了好一会,觉得应该有直接的方法,但没找到

列数=ui.textEdit.textCursor().columnNumber();

总字数=ui.textEdit.textCursor().position()

行数=总字数/每行字数+1  //我想用这个方法得到,但没找到每行字数
离线stdjgwyc
只看该作者 4楼 发表于: 2008-12-24
有点困难~~
不知道QTextTable * QTextCursor::insertTable ( int rows, int columns, const QTextTableFormat & format )
能不能实现~~ 不过需要先格式化~
QT交流群群号:2906359,(200人大群,持续升级)
离线adang322

只看该作者 5楼 发表于: 2008-12-24
获取QTextEdit中的每行的字数确实有点难度,找了很久也没有相关接口可以实现。
Linux、C/C++、QT、OpenGL、Linux/Unix socket、Python
离线stdjgwyc
只看该作者 6楼 发表于: 2008-12-24
等待高人出现~
QT交流群群号:2906359,(200人大群,持续升级)
离线fantalin
只看该作者 7楼 发表于: 2008-12-25
QTextCursor ::blockNumber() 获得行数
QTextCursor ::blockNumber() 获得烈数

每行的总字数是不是可以读出一行,然后用QString的API来实现呢
离线fantalin
只看该作者 8楼 发表于: 2008-12-25
不好意思,打错了
QTextCursor ::blockNumber()  获得行数
QTextCursor ::columnNumber() 获得列数

每行的总字数是不是可以读出一行,然后用QString的API来实现呢
离线lazybone
只看该作者 9楼 发表于: 2008-12-25
To  fantalin :
int r = textEdit.textCursor().blockNumber();打印一直为o
int r = ui.textEdit.document().blockCount();打印一直为1
文档上说在textEdit中是无效的,不知我的理解对么
Returns the number of the block the cursor is in, or 0 if the cursor is invalid.
Note that this function only makes sense in documents without complex objects such as tables or frames.
[ 此贴被lazybone在2008-12-25 11:25重新编辑 ]
离线roc496
只看该作者 10楼 发表于: 2008-12-25
离线fantalin
只看该作者 11楼 发表于: 2008-12-25
Returns the number of the block the cursor is in, or 0 if the cursor is invalid.

这段的意思是如果你使用的光标在textEdit中是无效的,就会返回0
否则是能够返回正确的行数的
离线wujjjj

只看该作者 12楼 发表于: 2011-06-08

    const QTextCursor cursor = ui->textEdit->textCursor();
    int rowNum=cursor.blockNumber();
    //獲取游標所在列的列號
    int colNum=cursor.columnNumber();
    //獲取游標所在行的行號    
    
    QLabel *positionLabel;
    positionLabel->setText(tr("%1列 %2行").arg(rowNum).arg(colNum));
    //顯示游標位置
离线cutemmll
只看该作者 13楼 发表于: 2011-06-08
看大家这么激动,我把我代码贴上来。
  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QtGui/QWidget>
  4. #include <QPushButton>
  5. #include <QTextEdit>
  6. #include <QLabel>
  7. class Widget : public QWidget
  8. {
  9.     Q_OBJECT
  10. public:
  11.     Widget(QWidget *parent = 0);
  12.     ~Widget();
  13. protected slots:
  14.     void showWordCount();
  15. private:
  16.     QPushButton* button;
  17.     QTextEdit* editor;
  18.     QLabel*  info;
  19. };
  20. #endif // WIDGET_H


  1. #include <QEvent>
  2. #include <QMouseEvent>
  3. #include "widget.h"
  4. Widget::Widget(QWidget *parent)
  5.     : QWidget(parent)
  6. {
  7.     button = new QPushButton("Get info",this);
  8.     editor = new QTextEdit(this);
  9.     editor->move(0,100);
  10.     info = new QLabel("info",this);
  11.     info->move(10,50);
  12.     connect(button,SIGNAL(clicked()),this,SLOT(showWordCount()));
  13. }
  14. Widget::~Widget()
  15. {
  16. }
  17. void Widget::showWordCount()
  18. {
  19.     editor->setFocus(Qt::OtherFocusReason);
  20.     if(editor->document()->isEmpty())
  21.     {
  22.         info->setText("0");
  23.         return;
  24.     }
  25.     QTextCursor tc =  editor->textCursor();
  26.     int curPos = tc.position();
  27.     tc.movePosition(QTextCursor::StartOfLine);
  28.     int start = tc.position();
  29.     tc.movePosition(QTextCursor::EndOfLine);
  30.     int end = tc.position();
  31.     info->setText(QString::number(end-start));
  32.     tc.setPosition(curPos);
  33.     editor->setTextCursor(tc);
  34. }
c------------enjoy qt & enjoy life-----------++
离线mp_jsblsx
只看该作者 14楼 发表于: 2012-06-30
帮顶顶顶顶
快速回复
限100 字节
 
上一个 下一个