Russian Qt Forum
Июнь 16, 2024, 02:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Qtextedit + перенос на следующую строку  (Прочитано 14546 раз)
jatsuk
Гость
« : Февраль 04, 2012, 08:29 »

Есть textedit, заполненный html кодом...
Есть слот br, который вставлет тег <br> по нажатию qpushbutton

int pos;
    QString rt;
    pos = ui->textEdit->textCursor().selectionStart();
    rt = ui->textEdit->textCursor().selectedText();
    ui->textEdit->textCursor().setPosition(pos);
    ui->textEdit->textCursor().insertText(rt+"<br>");

Надо, чтобы по нажатию клавиши Enter  вставлялся тег <br> в textedit и переносило на следующую строку.

Привязал слот к Qshortcut ... ui->br1->setShortcut(Qt::Key_Return);

Получилось так, захожу в программу - нажимаю Enter, вставляется <br>, всё ок... Но если выбрать курсором textedit, то по Enter просто переносит на следующюю строку и для вставки br приходится нажимать руками на слот, а хотелось бы именно на Enter...
Есть какая нибудь возможность сделать так ?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #1 : Февраль 04, 2012, 13:21 »

унаследуйся от QTextEdit и переопредели keyPressEvent():
Код
C++ (Qt)
void MyTextEdit::keyPressEvent(QKeyEvent *e)
{
   if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter)
       insertPlainText("<br>");
   QTextEdit::keyPressEvent(e);
}
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
jatsuk
Гость
« Ответ #2 : Февраль 04, 2012, 14:49 »

Спасибо, думал обойдется без унаследования, ну да ладно буду разбираться )

И ещё такой вопрос.

TextEdit не хочет отображаться отступ текста от картинки.... не знаю почему
вставляю тег <img src="simp.png" hspace=7 vspace=7 align=left> и отступы не реагирует никак... тест липнет к картинке

Пробовал менять hspace=7 vspace=7  ничего не изменяется. Через ковычки hspace="7" vspace="7" - тоже не работает.
В текстброузере попробовал - тоже самое. я уже и пиксели ставил и кавычки  Плачущий
В чем может быть проблема ?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #3 : Февраль 04, 2012, 15:56 »

QTextEdit как-то плохо реагирует на выравнивание. у меня еле получилось заставить отображаться текст по центру через одноклеточную таблицу, и то - это начинает работать только если виден вертикальный скролл или после того, как изменить размер, - по умолчанию всегда выравнивается налево.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
jatsuk
Гость
« Ответ #4 : Февраль 04, 2012, 16:11 »

QTextEdit как-то плохо реагирует на выравнивание. у меня еле получилось заставить отображаться текст по центру через одноклеточную таблицу, и то - это начинает работать только если виден вертикальный скролл или после того, как изменить размер, - по умолчанию всегда выравнивается налево.

Ну само обтекание тестом работает, а вот отступ нет (

А что посоветуете использовать вместо textedit ?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #5 : Февраль 04, 2012, 17:51 »

можно конечно QWebView попробовать, но это даст лишнюю зависимость
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
jatsuk
Гость
« Ответ #6 : Февраль 05, 2012, 05:52 »

Сделал как посоветовали... (про клавишу  enter)

Добавил в mainwinows.cpp

void MyTextEdit::keyPressEvent(QKeyEvent *e)
{
    if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter)
        insertPlainText("<br>");
    QTextEdit::keyPressEvent(e);
}

а в заголовочном файле mainwinows.h

class MyTextEdit : public QTextEdit
{
protected:
        void keyPressEvent ( QKeyEvent * e );
};


На нажатие клавиш не реагирует (по прежнему просто переносит на следующую строку)... Проверял через отладку в функцию void MyTextEdit даже не заходит
4 часа читал форум, думал я где то ошибся.... вроде всё нормально
Почему не реагирует то ?  может я какой то момент упустил ?
« Последнее редактирование: Февраль 05, 2012, 06:46 от jatsuk » Записан
Bepec
Гость
« Ответ #7 : Февраль 05, 2012, 08:47 »

Людиии...
Событие KeyPressEvent - нажатие клавиши, которое вызывается после (ПОСЛЕ) произошедшего события.

Чтобы заменить нажатие Enter, вам нужно поставить фильтр на события. И далее заменять 1 евент на другой.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #8 : Февраль 05, 2012, 13:28 »

Проверял через отладку в функцию void MyTextEdit даже не заходит
а класс-то ты своему текстэдиту заменил на этот новый?
Событие KeyPressEvent - нажатие клавиши, которое вызывается после (ПОСЛЕ) произошедшего события.
пока ты не вызовешь реализацию базового класса, ничего не произойдёт
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
« Ответ #9 : Февраль 05, 2012, 22:46 »

Кхм, проще говоря переопределив KeyPressEvent и оставив его пустым, я убью все стандартные нажатия? сомнительно.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #10 : Февраль 06, 2012, 02:05 »

когда сомневаешься, можно просто взять и попробовать.
Код
C++ (Qt)
#include <QApplication>
#include <QTextEdit>
#include <QKeyEvent>
 
class TextEdit : public QTextEdit
{
protected:
   void keyPressEvent(QKeyEvent *e) {}
};
 
int main(int argc, char **argv)
{
   QApplication a(argc, argv);
 
   TextEdit *te = new TextEdit;
   te->show();
 
   return a.exec();
}
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
jatsuk
Гость
« Ответ #11 : Февраль 10, 2012, 08:20 »

В общем получилось кое-что , а кое-что нет (

kambala правильно предположил, что я не поменял класс у своего виджета...

Если просто в mainwindows.cpp создать textedit, но уже с классом MyTextEdit, а не Qtextedit, то всё нормально. Работает, по кнопке enter вставляются тег <br> и переносится на новую строку.

MyTextEdit *te = new MyTextEdit;
  te->show();

Но этот te создается поверх окна, а нужно, чтобы это происходило уже с существующим  textEdit. Но как поменять класс этого виджета , который вставлен через designer??
Пробовал через правую кнопку на виджет - преобразовать в ... Ввел имя MyTextEdit и заголовочный файл mainwindows.h
В файле ui_mainwindows.h класс MyTextEdit

 textEdit = new MyTextEdit(tab);
        textEdit->setObjectName(QString::fromUtf8("textEdit"));
        textEdit->setGeometry(QRect(10, 100, 491, 351));
        textEdit->setFrameShape(QFrame::StyledPanel);
        textEdit->setReadOnly(false);

Но выдает кучу ошибок про этот класс...
Записан
Bepec
Гость
« Ответ #12 : Февраль 10, 2012, 08:41 »

Эм... лучше код, чем скриншот Подмигивающий
Записан
jatsuk
Гость
« Ответ #13 : Февраль 10, 2012, 08:45 »

Код слишком огромный уже... ) но попробую закоментить всё ненужное
Записан
jatsuk
Гость
« Ответ #14 : Февраль 10, 2012, 08:56 »

mainwindows.h

Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

...

namespace Ui
{
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
        QSqlDatabase db;

       ...

private:
    Ui::MainWindow *ui;

public slots:
   ....
};


class MyTextEdit : public QTextEdit
{
Q_OBJECT

protected:
        void keyPressEvent ( QKeyEvent * e );
};


#endif // MAINWINDOW_H

mainwindows.cpp

Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtSql>


void MyTextEdit::keyPressEvent(QKeyEvent *e)
{
    if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter)
      {  insertPlainText("<br>");
          //QMessageBox::warning(this, tr("Ошибка"),tr("Сначала выделите строку"));

      }
    QTextEdit::keyPressEvent(e);
}



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

 
//конектятся слоты к сигналам и т.п

/*
MyTextEdit *te = new MyTextEdit;
te->setGeometry(QRect(10, 100, 491, 351));
   te->show();
   */

}



 //много много слотов )




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



ui_mainwindows.h

Код:
#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H

////
#include <mainwindow.h>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
    QWidget *centralWidget;
    QTabWidget *tabWidget;
    QWidget *tab;
    QPushButton *add;
    MyTextEdit *textEdit;

// остальные виджеты

    void setupUi(QMainWindow *MainWindow)
    {
        if (MainWindow->objectName().isEmpty())
            MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
        MainWindow->resize(930, 508);
        centralWidget = new QWidget(MainWindow);
        centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
        tabWidget = new QTabWidget(centralWidget);
        tabWidget->setObjectName(QString::fromUtf8("tabWidget"));
        tabWidget->setGeometry(QRect(420, 0, 511, 481));
        tab = new QWidget();
        tab->setObjectName(QString::fromUtf8("tab"));
        add = new QPushButton(tab);
        add->setObjectName(QString::fromUtf8("add"));
        add->setGeometry(QRect(130, 10, 75, 23));
        textEdit = new MyTextEdit(tab);
        textEdit->setObjectName(QString::fromUtf8("textEdit"));
        textEdit->setGeometry(QRect(10, 100, 491, 351));
        textEdit->setFrameShape(QFrame::StyledPanel);
        textEdit->setReadOnly(false);
        textEdit->setHtml(QString::fromUtf8("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;\"></p></body></html>"));
        textEdit->setAcceptRichText(false);
       


        retranslateUi(MainWindow);

        tabWidget->setCurrentIndex(0);


        QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi

    void retranslateUi(QMainWindow *MainWindow)
    {
        MainWindow->setWindowTitle(QApplication::translate("MainWindow", "\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\260\320\275\320\260\320\273\320\270\320\267\320\276\320\262 1.0", 0, QApplication::UnicodeUTF8));
        add->setText(QApplication::translate("MainWindow", "\320\224\320\276\320\261\320\260\320\262\320\270\321\202\321\214", 0, QApplication::UnicodeUTF8));
        pro->setText(QApplication::translate("MainWindow", "\320\237\321\200\320\276\321\201\320\274\320\276\321\202\321\200", 0, QApplication::UnicodeUTF8));
        clear_but->setText(QApplication::translate("MainWindow", "\320\236\321\207\320\270\321\201\321\202\320\270\321\202\321\214", 0, QApplication::UnicodeUTF8));
        h1->setText(QApplication::translate("MainWindow", "h1", 0, QApplication::UnicodeUTF8));
        h3->setText(QApplication::translate("MainWindow", "h3", 0, QApplication::UnicodeUTF8));
        u->setText(QApplication::translate("MainWindow", "\321\207", 0, QApplication::UnicodeUTF8));
        b->setText(QApplication::translate("MainWindow", "\320\266", 0, QApplication::UnicodeUTF8));
        em->setText(QApplication::translate("MainWindow", "\320\272", 0, QApplication::UnicodeUTF8));
        br1->setText(QApplication::translate("MainWindow", "br", 0, QApplication::UnicodeUTF8));
        playsound->setText(QApplication::translate("MainWindow", "Play", 0, QApplication::UnicodeUTF8));
        incimg->setText(QApplication::translate("MainWindow", "img", 0, QApplication::UnicodeUTF8));
        table->setText(QApplication::translate("MainWindow", "table", 0, QApplication::UnicodeUTF8));
        tabWidget->setTabText(tabWidget->indexOf(tab), QApplication::translate("MainWindow", "\320\240\320\265\320\264\320\260\320\272\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265", 0, QApplication::UnicodeUTF8));
        label->setText(QApplication::translate("MainWindow", "\320\235\320\260\320\267\320\262\320\260\320\275\320\270\320\265", 0, QApplication::UnicodeUTF8));
        textEdit_2->setHtml(QApplication::translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;\"></p></body></html>", 0, QApplication::UnicodeUTF8));
        textEdit_3->setHtml(QApplication::translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'MS Shell Dlg 2'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:8pt;\">\320\227\320\262\321\203\320\272\320\276\320\262\320\276\320\271 \321\204\320\260\320\271\320\273</span></p></body></html>", 0, QApplication::UnicodeUTF8));
        playsound_2->setText(QApplication::translate("MainWindow", "Play", 0, QApplication::UnicodeUTF8));
        tabWidget->setTabText(tabWidget->indexOf(tab_2), QApplication::translate("MainWindow", "\320\237\321\200\320\276\321\201\320\274\320\276\321\202\321\200", 0, QApplication::UnicodeUTF8));
        checkBox->setText(QApplication::translate("MainWindow", "\320\220\320\262\321\202\320\276\320\276\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265", 0, QApplication::UnicodeUTF8));
        del->setText(QApplication::translate("MainWindow", "\320\243\320\264\320\260\320\273\320\270\321\202\321\214", 0, QApplication::UnicodeUTF8));
        edit_but->setText(QApplication::translate("MainWindow", "\320\240\320\265\320\264\320\260\320\272\321\202\320\270\321\200\320\276\320\262\320\260\321\202\321\214", 0, QApplication::UnicodeUTF8));
        ok_but->setText(QApplication::translate("MainWindow", "\320\237\320\276\320\264\321\202\320\262\320\265\321\200\320\264\320\270\321\202\321\214", 0, QApplication::UnicodeUTF8));
        obntab->setText(QApplication::translate("MainWindow", "\320\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214", 0, QApplication::UnicodeUTF8));
        label_2->setText(QApplication::translate("MainWindow", "\302\251 2012 medjs.ru. \320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265 \320\260\320\275\320\260\320\273\320\270\320\267\320\276\320\262. v 1.0", 0, QApplication::UnicodeUTF8));
    } // retranslateUi

};

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H

Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.093 секунд. Запросов: 22.