crossplatform.ru

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


  Ответ в Qt и реакция на ввод
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Алексей1153 Дата 27.3.2013, 12:56
  lanz, не, в принципе это вполне может скомпилиться, но не в случае класса QTextEdit, так как такой метод уже точно определён
lanz Дата 27.3.2013, 8:09
 
Цитата
*жесть* :)

Насколько я понимаю, это из Ruby.
Алексей1153 Дата 26.3.2013, 18:12
  *жесть* :)

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 Дата 26.3.2013, 16:38
  Нет, не в том. Нужно создать свой класс, который наследует от QTextEdit.
И в нем описывать свой метод.
class CustomTextEdit : public QTextEdit {
    public:
        // конструктор/деструктор
    protected:
        void keyPressEvent(QKeyEvent *){}
};

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

Еще одним способом является установка фильтра событий - http://qt-project.org/doc/qt-4.8/qobject.h...tallEventFilter
AndrewKlykow Дата 26.3.2013, 15:50
  А, ну так то рабать будет. Но я не о том. Мне нужно метод 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, 15:04
  Алексей1153 имел ввиду следующее(как мне кажется :lol: ):
void MainWindow::on_textEdit_textChanged()
{
  QString s=ui->textEdit->text();
}
AndrewKlykow Дата 26.3.2013, 14:52
 
Цитата(Алексей1153 @ 25.3.2013, 0:38) *
а так пробовал ?

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

Пробовал. Qt ругается, что метод text() нигде не определен. Оно и понятно. Text() метод QKeyEvent, поэтому его нужно вызывать через переменную, имеющую тип QKeyEvent. Так что так никак не получится.
Алексей1153 Дата 24.3.2013, 23:38
  а так пробовал ?

void MainWindow::on_textEdit_textChanged()
{
  QString s=text();
}
AndrewKlykow Дата 24.3.2013, 22:37
  Здравствуйте. Подскажите, пожалуйста, кто может. Нужно, чтобы вводимые 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;
    }
}
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 27.4.2024, 14:05