Russian Qt Forum
Ноябрь 24, 2024, 19:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: вызов слота из Qtextedit [Решено]  (Прочитано 8181 раз)
jatsuk
Гость
« : Март 30, 2012, 14:51 »

Помогите пожалуйста, что то не могу додуматься )

В общем задача такая: есть Qtextedit или Qtextbrowser
В нем идут слова вот так:
СЛОВО 1
СЛОВО 2
СЛОВО 3
СЛОВО 4...
например, они являются html ссылками ...
Нужно чтобы по нажатию на это слово выполнялся слот myslot();

Я вывел этот html код в textbrowser, для отловки нажатия на ссылку нашел сигнал
QObject::connect(ui->opissim, SIGNAL(backwardAvailable (bool)),this, SLOT(myslot ()));
myslot(); реально запускается, но вопрос - как передать само СЛОВО, чтобы о нем знать в myslot Непонимающий
« Последнее редактирование: Апрель 07, 2012, 06:21 от jatsuk » Записан
_OLEGator_
Гость
« Ответ #1 : Март 30, 2012, 14:56 »

Странными сигналами пользуешься
Код
C++ (Qt)
void QTextBrowser::anchorClicked ( const QUrl & link ) [signal]
Записан
jatsuk
Гость
« Ответ #2 : Март 30, 2012, 15:46 »

Если я все правильно понял, то я передам в слот URL.
Сделал, по нажатию по ссылке запускается слот, с содержимым переменной QUrl, указанным в текстбраузере...
Но мне то нужно передавать не урл адресс, а русское слово, так оно отображается вот так ))) так как обычно сайты с русским доменом в браузере ) %D0%BC%D0%B0%D0%BA%D1%80%D0%BE%D1%82%D0%B0
Так что сделать то ?
Записан
mutineer
Гость
« Ответ #3 : Март 30, 2012, 16:01 »

Попробуй это
http://doc.crossplatform.ru/qt/4.7.x/html-qt/qurl.html#fromPercentEncoding
Записан
jatsuk
Гость
« Ответ #4 : Март 30, 2012, 16:06 »

Не понял что вы мне за ссылку кинули )
Всё оказало проще...
Сделал преобразование переменной QURL в QString и слово стало снова русским

QString fdhfd2=fdhfd.toString();

Всем спасибо, проблема решена Смеющийся
Записан
_OLEGator_
Гость
« Ответ #5 : Март 30, 2012, 16:08 »

Внеси соответствующие изменения в заголовок темы, отредактировав первое сообщение.
Записан
mutineer
Гость
« Ответ #6 : Март 30, 2012, 16:18 »

Не понял что вы мне за ссылку кинули )
Всё оказало проще...
Сделал преобразование переменной QURL в QString и слово стало снова русским

QString fdhfd2=fdhfd.toString();

Всем спасибо, проблема решена Смеющийся

ссылка была на метод, преобразующий процентную кодировку в нормальный текст
Записан
jatsuk
Гость
« Ответ #7 : Март 31, 2012, 03:20 »

mutineer, спасибо.

Но проблема не решена, появилась новая )
Если выводить текст в слоте myslot, то весь текст выводится ссылкой. пытался выводить просто текст, а не из переменной, пытался через sethtml, всё тоже текст - одна большая ссылка. самое интересное , что если вручную потом нажать на слот, который выводит какой либо тескт в textbrowser, то выводится нормально - НЕ ссылкой.
Что творится, я не понимаю ?)
Записан
mutineer
Гость
« Ответ #8 : Март 31, 2012, 11:32 »

не понял, показывай код
Записан
jatsuk
Гость
« Ответ #9 : Март 31, 2012, 14:51 »

в .h файле

public slots:
void backward(const QUrl fdhfd);

в .cpp файле

QObject::connect(ui->opissim, SIGNAL ( anchorClicked(const QUrl)),this, SLOT(backward (const QUrl)));

...

void MainWindow::backward(const QUrl fdhfd)
{

QString fdhfd2=fdhfd.toString();
QSqlQuery ppsim;//Запрос селекта
ppsim.exec("SELECT o_sim FROM alfa WHERE n_sim='"+fdhfd2+"' ");

while(ppsim.next()){
QString opsim3 = ppsim.value(0).toString(); //изымаем стоку из таблицы
ui->opissim->setText(opsim3);
}

}

в строке opsim3 содержится обычный текст, а выводится он как одна большая ссылка...
Записан
V1KT0P
Гость
« Ответ #10 : Март 31, 2012, 20:37 »

в .h файле

public slots:
void backward(const QUrl fdhfd);

в .cpp файле

QObject::connect(ui->opissim, SIGNAL ( anchorClicked(const QUrl)),this, SLOT(backward (const QUrl)));

...

void MainWindow::backward(const QUrl fdhfd)
{

QString fdhfd2=fdhfd.toString();
QSqlQuery ppsim;//Запрос селекта
ppsim.exec("SELECT o_sim FROM alfa WHERE n_sim='"+fdhfd2+"' ");

while(ppsim.next()){
QString opsim3 = ppsim.value(0).toString(); //изымаем стоку из таблицы
ui->opissim->setText(opsim3);
}

}

в строке opsim3 содержится обычный текст, а выводится он как одна большая ссылка...

opissim - QTextBrowser?
У меня если текст в QTextBrowser через setText пихать, получается текст а не ссылка. Уверен сто html теги не передаешь?
Записан
jatsuk
Гость
« Ответ #11 : Апрель 01, 2012, 04:38 »

Да, он самый )
пробовал даже напрямую писать ui->opissim->setText("балалаалл");

балалаалл становится ссылкой.

а что есть в этом слоте вызвать другой слот, например, myslot2 и передать туда уже qstring ?
Записан
V1KT0P
Гость
« Ответ #12 : Апрель 01, 2012, 15:28 »

Да, он самый )
пробовал даже напрямую писать ui->opissim->setText("балалаалл");

балалаалл становится ссылкой.

а что есть в этом слоте вызвать другой слот, например, myslot2 и передать туда уже qstring ?
Выложи минимальный проект с багом и тебе сразу помогут.
Записан
jatsuk
Гость
« Ответ #13 : Апрель 07, 2012, 04:28 »

Пересилил себя наконец-то и написал минимальный проект, чтобы вы посмотрели в чём дело...

В ТекстБраузер передается описание
<a href=\"Слово1\">Слово1</a><br><a href=\"Слово2\">Слово2</a><br><a href=\"Слово3\">Слово3</a><br>Слово4<br>Слово5

то есть выдается 3 ссылки и 2 обычных слова, по нажатию по ссылке должно вывести просто описание этого слова, например.
Описание для слова 1

А отображается оно почему то как ссылка...

Приложил проект.
Записан
V1KT0P
Гость
« Ответ #14 : Апрель 07, 2012, 04:50 »

А отображается оно почему то как ссылка...
Действительно =). Это какая-то недокументированная фича. Я советую поступить так, как это делает кьютовский дизайнер:
Код
C++ (Qt)
QString html = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" "\
       "\"http://www.w3.org/TR/REC-html40/strict.dtd\"><html><head>"\
       "<meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">p, "\
       "li { white-space: pre-wrap; }</style></head><body style=\" "\
       "font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; "\
       "font-style:normal;\"><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;\">%1</span></p></body></html>";
ui->opissim->setHtml(html.arg(textopis));
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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