crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Qt и реакция на ввод
AndrewKlykow
  опции профиля:
сообщение 24.3.2013, 22:37
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 24.3.2013
Пользователь №: 3762

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте. Подскажите, пожалуйста, кто может. Нужно, чтобы вводимые 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
  опции профиля:
сообщение 24.3.2013, 23:38
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


а так пробовал ?

void MainWindow::on_textEdit_textChanged()
{
  QString s=text();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AndrewKlykow
  опции профиля:
сообщение 26.3.2013, 14:52
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 24.3.2013
Пользователь №: 3762

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 25.3.2013, 0:38) *
а так пробовал ?

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

Пробовал. Qt ругается, что метод text() нигде не определен. Оно и понятно. Text() метод QKeyEvent, поэтому его нужно вызывать через переменную, имеющую тип QKeyEvent. Так что так никак не получится.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 26.3.2013, 15:04
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Алексей1153 имел ввиду следующее(как мне кажется :lol: ):
void MainWindow::on_textEdit_textChanged()
{
  QString s=ui->textEdit->text();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AndrewKlykow
  опции профиля:
сообщение 26.3.2013, 15:50
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 24.3.2013
Пользователь №: 3762

Спасибо сказали: 0 раз(а)




Репутация:   0  


А, ну так то рабать будет. Но я не о том. Мне нужно метод 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
  опции профиля:
сообщение 26.3.2013, 16:38
Сообщение #6


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Нет, не в том. Нужно создать свой класс, который наследует от QTextEdit.
И в нем описывать свой метод.
class CustomTextEdit : public QTextEdit {
    public:
        // конструктор/деструктор
    protected:
        void keyPressEvent(QKeyEvent *){}
};

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

Еще одним способом является установка фильтра событий - http://qt-project.org/doc/qt-4.8/qobject.h...tallEventFilter
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 26.3.2013, 18:12
Сообщение #7


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


*жесть* :)

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
  опции профиля:
сообщение 27.3.2013, 8:09
Сообщение #8


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Цитата
*жесть* :)

Насколько я понимаю, это из Ruby.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 27.3.2013, 12:56
Сообщение #9


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


lanz, не, в принципе это вполне может скомпилиться, но не в случае класса QTextEdit, так как такой метод уже точно определён
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 14:18