LINUX.ORG.RU

QTextEdit и ввод кириллицы

 


0

1

Добрый день!

Суть вопроса при вводе с клавиатуры в QTextEdit символов кириллицы вместо одного символа вводится два. Дополнительных коннектов на edit нет.

При переопределении для родительского виджета keyPressEvent() при вводи латиницы или цифр слот отрабатывает один раз, но при вводе кириллицы дважды. Подскажет кто-нибудь, где я дурак?

Header

#ifndef EXPENSE_H
#define EXPENSE_H

#include <QWidget>
#include <QtGui>

class Expense : public QWidget 
{
	Q_OBJECT

public:
	Expense(QWidget *parent);
	~Expense();

private:
	QTextEdit *txt;

	void createWindow();			
	virtual void keyPressEvent(QKeyEvent *);

};

#endif // EXPENSE_H

Sourse


#include "expense.h"

Expense::Expense(QWidget *parent):QWidget(parent){
	createWindow();	
}

Expense::~Expense(){
	delete txt;
}

void Expense::keyPressEvent(QKeyEvent * event){
	switch (event->key()){
		case Qt::Key_Escape: 
		case Qt::Key_Home:{
			close();	
			break;
		}
		case Qt::Key_Return:{
			if (event->modifiers() == Qt::ShiftModifier)
				txt->setText(txt->toPlainText()+"\n");
			else{
				txt->clear();
				close();
			}
			break;
		}
		default:{
			QString text = txt->toPlainText()+event->text();
			txt->clear();
			txt->setPlainText(text);
		}
	}
}

void Expense::createWindow(){
	QVBoxLayout * layout = new QVBoxLayout;

	txt = new QTextEdit(this);
	layout->addWidget(txt);
	setLayout(layout);	
}


Так keyPressEvent просто перехватывает, а не блокирует само событие. То есть событие идет дальше. Вы или event->ignore() используйте или через eventFilter делайте фильтрацию событий.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.