Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: IUnknown от Августа 01, 2005, 19:56



Название: textChanged в QMultiLineEdit
Отправлено: IUnknown от Августа 01, 2005, 19:56
Есть текстовое поле QMultiLineEdit. Нужно сделать так что-бы при вводе в него текста аналогичный текст отображался на удаленном компе. Для одниночных символов делаю так:
bool QRemoteEdit::event(QEvent *pEvent)
{
  if (pEvent->type() == QEvent::KeyPress)
  {
    QKeyEvent *pKeyEvent = static_cast<QKeyEvent *>(pEvent);
    m_pSocket->writeBlock(pKeyEvent->text(),
                                       pKeyEvent->text().length());
   }
   return QMultiLineEdit::event(pEvent);
}

Как мне сделать так что-бы при вставке текста из буфера серверу был отправлен весь текст. Можно ли как-то сделать так что-бы при обработке textChanged как-то получать не весь текст существующий в текстовом поле, а только что введенный. Еще есть некоторые проблемы при удалении символов. Если кто сталкивался посоветуйте как это реализовать. Заранее благодарен.


Название: textChanged в QMultiLineEdit
Отправлено: jindos от Августа 02, 2005, 10:33
Если текст может быть вставлен в любое место QMultiLineEdit (а это видимо так), то нужно отправлять на сервер содержимое буфера обмена и QMultiLineEdit::getCursorPosition(int*line, int*col)... Наверное, этого будет достаточно...


Название: textChanged в QMultiLineEdit
Отправлено: IUnknown от Августа 02, 2005, 15:58
А как сделать так что-бы при изменении текста у клиента на сервере все тоже изменялось - например устанавливаем курсор в любую позицию и удаляем один символ и что-бы на сервере был удален тот же символ?


Название: textChanged в QMultiLineEdit
Отправлено: jindos от Августа 02, 2005, 16:41
Это все нужно обрабатывать, как я понимаю, если ты не хочешь каждый раз пересылать весь текст...
Если дело в удалении, то это тот же ввод, только наоборот: в обработке BackSpace или Del отсылаешь позицию курсора и количество удаленных символов = количество символов до удаления-количество символов после удаления (QMultilineEdit::text().length()) и направление выделения (при помощи markedText() можно получить)...

Все это обрабатываешь на клиенте... По моему не сложно...


Название: textChanged в QMultiLineEdit
Отправлено: IUnknown от Августа 02, 2005, 22:08
Большое спасибо за помощь, но тут у меня возник еще один простенький вопросик:
у меня есть структура
struct PACKET
{
  Q_UINT8 m_uiState;
  Q_UINT32 m_uiMsg;
  Q_UINT32 m_uiWParam;
  Q_UINT32 m_uiLParam;
};
которую я отсылаю. Вопрос у том как мне реализовать прием этой структуры в readyRead() желательно с использованием QBytesArray.


Название: textChanged в QMultiLineEdit
Отправлено: jindos от Августа 03, 2005, 09:49
Ну если ты ее через QDataStream пишешь в поток, то прочитать в обработчике сигнала readyRead можно при помощи оператора >>