добрый день! есть вопрос:
как сделать чтобы если в QTextEdit'е ввели символ { или : и нажали Enter, то курсор перемещается не в начало следующей строки, а на следующую строку и под этим символом?
заранее большое спасибо!
#include <QtGui/QApplication>
#include <QTextEdit>
#include <QKeyEvent>
class CTextEdit: public QTextEdit
{
public:
CTextEdit( QWidget *pParent = 0);
protected:
virtual bool event( QEvent *pEvent);
};
CTextEdit::CTextEdit( QWidget *pParent):QTextEdit( pParent)
{
}
bool CTextEdit::event( QEvent *pEvent)
{
if( pEvent->type() == QEvent::KeyPress)
{
QKeyEvent *pKeyEvent = static_cast<QKeyEvent *>(pEvent);
if( pKeyEvent->key() == Qt::Key_Return)
{
QString szText = toPlainText();
if( szText.right( 1)=="{" || szText.right( 1)==":")
{
insertPlainText( "\r\n-->");
return true;
}
}
}
return QTextEdit::event( pEvent);
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
CTextEdit te;
te.show();
return a.exec();
}
Тебе осталось только получить расстояние до "{" или ":" и заменить --> на него...
int n1 = pTextEdit->textCursor().blockNumber();
int n2 = pTextEdit->textCursor().columnNumber();
QString szText = toPlainText();
void TextEdit::keyPressEvent(QKeyEvent *keyEvent) {
if(keyEvent->key() == Qt::Key_Return) {
QString text = toPlainText();
if((text.right(1) == "{") || (text.right(1) == ":")) {
int n = textCursor().columnNumber();
insertPlainText("\n");
for(int i=0; i < n; ++i) insertPlainText(" ");
return;
}
}
QTextEdit::keyPressEvent(keyEvent);
}
void TextEdit::keyPressEvent(QKeyEvent *keyEvent) {
if(keyEvent->key() == Qt::Key_Return) {
QString text = toPlainText();
if((text.right(1) == "{") || (text.right(1) == ":")) {
n = textCursor().columnNumber();
insertPlainText("\n");
for(int i=0; i < n; ++i) insertPlainText(" ");
return;
}
if(text.right(1) == "}") {
if(n) {
n=0;
QTextEdit::keyPressEvent(keyEvent);
}
}
if(n) {
insertPlainText("\n");
for(int i=0; i < n; ++i) insertPlainText(" ");
return;
}
}
QTextEdit::keyPressEvent(keyEvent);
}
QTextBlock Block = textCursor().block();
const QString sText = Block.text();