crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Connect
ruzik
  опции профиля:
сообщение 13.4.2011, 21:27
Сообщение #1


Активный участник
***

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

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




Репутация:   0  


Скажите пожалуйста что я сделал не так с connectoм, вроде все правильно, но не работает
connect(searchLineEdit, SIGNAL(textChanged(const QString & text)), this, SLOT(findInTheText(const QString & text)));
//searchLineEdit - объект типа QLineEdit
//----------
protected slots:
void findInTheText(const QString & text);
//----------
void RizekQssEditor::findInTheText(const QString & text)
{
QVariant a = plainTextEdit->find(text);
searchLabel->setText(a.toString()); //это просто проверка(слот не срабатывает)
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 14.4.2011, 5:28
Сообщение #2


Активный участник
***

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

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




Репутация:   6  


Цитата(ruzik @ 13.4.2011, 23:27) *
Скажите пожалуйста что я сделал не так с connectoм, вроде все правильно, но не работает
connect(searchLineEdit, SIGNAL(textChanged(const QString & text)), this, SLOT(findInTheText(const QString & text)));
//searchLineEdit - объект типа QLineEdit
//----------
protected slots:
void findInTheText(const QString & text);
//----------
void RizekQssEditor::findInTheText(const QString & text)
{
QVariant a = plainTextEdit->find(text);
searchLabel->setText(a.toString()); //это просто проверка(слот не срабатывает)
}


гм. А разве в методе коннект необходимо указывать имена переменных? Нужно так:
QObject::connect(lineEdit, SIGNAL(textChanged(QString)), this, SLOT(someSlot(QString)));
Следует не путать textChanged и textEdited, первый вызывается при всяком изменении текста, другой - только тогда, когда редактирование завершено (Нажат Enter или перешли на другой виджет)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ruzik
  опции профиля:
сообщение 17.4.2011, 13:16
Сообщение #3


Активный участник
***

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

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




Репутация:   0  


Спасибо за помощь, но возникла другая проблема:
Я вбиваю в строку то что нужно например "Asd", у меня есть в QPlainTextEdit с которым связаны строка поиска символы "Asd" но мне выдает false, то есть не найдено,
возможно дело в кодировках, не подскажите как решить эту проблему?
Заранее огромное спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ruzik
  опции профиля:
сообщение 17.4.2011, 17:25
Сообщение #4


Активный участник
***

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

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




Репутация:   0  


Код остался неизменным(то же что и в 1 посте)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 17.4.2011, 17:30
Сообщение #5


Активный участник
***

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

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




Репутация:   6  


Ничего не пойму. Есть LineEdit, который соединён со слотом. Что необходимо сделать в этом слоте? Найти некое вхождение строки "text" в этот lineEdit и вывести его в Label?

А понял. попробуйте так: plainTextEdit->toPlainText().contains(lineEdit->text());

UPD Нашёл Ваше сообщение в другой теме, понял чего хотите. Обратите внимание, что метод QPlainText::find(), по умолчанию, ищет с текущей позиции курсора ВПЕРЕД. А курсор у Вас стоит в самом конце документа. Или переставьте его перед поиском в самое начало, или ищите в обоих направлениях от курсора. Вот так искать в обратном направлении QPlainText::find("texttofind", QTextDocument::FindBackward);

Сообщение отредактировал silver47 - 17.4.2011, 18:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ruzik
  опции профиля:
сообщение 17.4.2011, 18:54
Сообщение #6


Активный участник
***

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

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




Репутация:   0  


Огромное спасибо, как раз то что мне нужно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ruzik
  опции профиля:
сообщение 18.4.2011, 15:41
Сообщение #7


Активный участник
***

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

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




Репутация:   0  


Ну и если позволите последний вопрос :D
Как изменить цвет найденного цвета в поиске, а то у меня по-умолчанию светло-серый оказался, который на белом фоне не особо хорошо виден
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 18.4.2011, 17:57
Сообщение #8


Активный участник
***

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

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




Репутация:   6  


Цитата(ruzik @ 18.4.2011, 17:41) *
Ну и если позволите последний вопрос :D
Как изменить цвет найденного цвета в поиске, а то у меня по-умолчанию светло-серый оказался, который на белом фоне не особо хорошо виден


Элементарно! Но для этого придется менять палитру. Это делается таким образом:
// копируем существующую палистру, чтобы ее изменить
QPalette newPal(plainTextEdit->palette());

// устанавливаем цвет бэкграунда
newPal.setColor(QPalette::Highlight, Qt::black);

// устанавливаем цвет текста
newPal.setColor(QPalette::HighlightText, Qt::green);

// устанавливаем измененную палитру для нашего эдита
plainTextEdit->setPalette(newPal);
// Вуаля


теперь прикрутите рюшечки для вашего приложения: заставьте изменять цвет выделения на подобный только при поиске (ну что-то типа если строка поиска не свободна, то применить новую палитру, если свободна то стандартную).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ruzik
  опции профиля:
сообщение 19.4.2011, 16:24
Сообщение #9


Активный участник
***

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

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




Репутация:   0  


Возникла другая проблема есть код:
plainTextEdit->find(searchLineEdit->text(), QTextDocument::FindBackward);
он ищет все слова позади текущего положения каретки, как сделать так что бы
1) или искало слова по обе стороны каретки
2) или как поставит каретку в конец QPlainTextEdit
Я в ассисте смотрел подходящего флага нет
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 20.4.2011, 5:14
Сообщение #10


Активный участник
***

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

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




Репутация:   6  


Цитата(ruzik @ 19.4.2011, 19:24) *
2) или как поставит каретку в конец QPlainTextEdit


plainTextEdit->moveCursor(QTextCursor::Start);
- перемещает курсор в начало документа.

можно искать в одном направлении, и, если поиск неудачен - искать в другом.
if(!plainTextEdit->find(ui->lineEdit->text())) plainTextEdit->find(ui->lineEdit->text(), QTextDocument::FindBackward);

Но тут выделение при поиске не работает корректно. Думаю что первый вариант более предпочтителен, все равно позиция курсора будет меняться при первом же найденном вхождении.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 30.6.2022, 7:25