Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Qt и реакция на ввод
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
AndrewKlykow
Здравствуйте. Подскажите, пожалуйста, кто может. Нужно, чтобы вводимые textedit буквы по событию введения закидывались в QString. Долго искал в интернете ответ, но не нашел. Присылаю код, который надумал после поисков. Код работает, но в QString ничего не попадает.
void MainWindow::on_textEdit_textChanged()
{
    if (g==0)
    {
    Qt::Key key;
    QKeyEvent *ev = new QKeyEvent(QKeyEvent::KeyPress, key, Qt::NoModifier);
    QString b = ev->text();
   g=1;
   QTextCursor Cursor= ui->textEdit->textCursor();
   Cursor.setPosition(0);
   Cursor.insertText(b);
   g=0;
    }
}
Алексей1153
а так пробовал ?

void MainWindow::on_textEdit_textChanged()
{
  QString s=text();
}
AndrewKlykow
Цитата(Алексей1153 @ 25.3.2013, 0:38) *
а так пробовал ?

void MainWindow::on_textEdit_textChanged()
{
  QString s=text();
}

Пробовал. Qt ругается, что метод text() нигде не определен. Оно и понятно. Text() метод QKeyEvent, поэтому его нужно вызывать через переменную, имеющую тип QKeyEvent. Так что так никак не получится.
lanz
Алексей1153 имел ввиду следующее(как мне кажется :lol: ):
void MainWindow::on_textEdit_textChanged()
{
  QString s=ui->textEdit->text();
}
AndrewKlykow
А, ну так то рабать будет. Но я не о том. Мне нужно метод KeyEvent для TextEdit переопределить. Для начала переопределяю его, чтобы он мне ничего не выводил
void QTextEdit::keyPressEvent(QKeyEvent *){}

Переопределяю здесь:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QKeyEvent>
#include <Qt>
#include <QApplication>
int g=0;
void QTextEdit::keyPressEvent(QKeyEvent *){}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_textEdit_textChanged()
{

}

Но TextEdit все равно выводит все, а при запуске отладки Qt выдает Warning: 'virtual void QTextEdit::keyPressEvent(QKeyEvent*)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
Я наверное как-то неправильно переопределяю его. Не в том месте пишу, наверное, пишу переопределение?
lanz
Нет, не в том. Нужно создать свой класс, который наследует от QTextEdit.
И в нем описывать свой метод.
class CustomTextEdit : public QTextEdit {
    public:
        // конструктор/деструктор
    protected:
        void keyPressEvent(QKeyEvent *){}
};

Затем вместо QTextEdit добавить свой класс в форму.

Еще одним способом является установка фильтра событий - http://qt-project.org/doc/qt-4.8/qobject.h...tallEventFilter
Алексей1153
*жесть* :)

AndrewKlykow,

Цитата(AndrewKlykow @ 26.3.2013, 18:50) *
Переопределяю здесь:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QKeyEvent>
#include <Qt>
#include <QApplication>
int g=0;
void QTextEdit::keyPressEvent(QKeyEvent *){}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),



а это хоть скомпилировалось ?
lanz
Цитата
*жесть* :)

Насколько я понимаю, это из Ruby.
Алексей1153
lanz, не, в принципе это вполне может скомпилиться, но не в случае класса QTextEdit, так как такой метод уже точно определён
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.