Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: jatsuk от Март 30, 2012, 14:51



Название: вызов слота из Qtextedit [Решено]
Отправлено: 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 ???


Название: Re: вызов слота из Qtextedit
Отправлено: _OLEGator_ от Март 30, 2012, 14:56
Странными сигналами пользуешься
Код
C++ (Qt)
void QTextBrowser::anchorClicked ( const QUrl & link ) [signal]


Название: Re: вызов слота из Qtextedit
Отправлено: jatsuk от Март 30, 2012, 15:46
Если я все правильно понял, то я передам в слот URL.
Сделал, по нажатию по ссылке запускается слот, с содержимым переменной QUrl, указанным в текстбраузере...
Но мне то нужно передавать не урл адресс, а русское слово, так оно отображается вот так ))) так как обычно сайты с русским доменом в браузере ) %D0%BC%D0%B0%D0%BA%D1%80%D0%BE%D1%82%D0%B0
Так что сделать то ?


Название: Re: вызов слота из Qtextedit
Отправлено: mutineer от Март 30, 2012, 16:01
Попробуй это
http://doc.crossplatform.ru/qt/4.7.x/html-qt/qurl.html#fromPercentEncoding


Название: Re: вызов слота из Qtextedit
Отправлено: jatsuk от Март 30, 2012, 16:06
Не понял что вы мне за ссылку кинули )
Всё оказало проще...
Сделал преобразование переменной QURL в QString и слово стало снова русским

QString fdhfd2=fdhfd.toString();

Всем спасибо, проблема решена ;D


Название: Re: вызов слота из Qtextedit
Отправлено: _OLEGator_ от Март 30, 2012, 16:08
Внеси соответствующие изменения в заголовок темы, отредактировав первое сообщение.


Название: Re: вызов слота из Qtextedit
Отправлено: mutineer от Март 30, 2012, 16:18
Не понял что вы мне за ссылку кинули )
Всё оказало проще...
Сделал преобразование переменной QURL в QString и слово стало снова русским

QString fdhfd2=fdhfd.toString();

Всем спасибо, проблема решена ;D

ссылка была на метод, преобразующий процентную кодировку в нормальный текст


Название: Re: вызов слота из Qtextedit [Решено]
Отправлено: jatsuk от Март 31, 2012, 03:20
mutineer, спасибо.

Но проблема не решена, появилась новая )
Если выводить текст в слоте myslot, то весь текст выводится ссылкой. пытался выводить просто текст, а не из переменной, пытался через sethtml, всё тоже текст - одна большая ссылка. самое интересное , что если вручную потом нажать на слот, который выводит какой либо тескт в textbrowser, то выводится нормально - НЕ ссылкой.
Что творится, я не понимаю ?)


Название: Re: вызов слота из Qtextedit
Отправлено: mutineer от Март 31, 2012, 11:32
не понял, показывай код


Название: Re: вызов слота из Qtextedit
Отправлено: jatsuk от Март 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 содержится обычный текст, а выводится он как одна большая ссылка...


Название: Re: вызов слота из Qtextedit
Отправлено: V1KT0P от Март 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 теги не передаешь?


Название: Re: вызов слота из Qtextedit
Отправлено: jatsuk от Апрель 01, 2012, 04:38
Да, он самый )
пробовал даже напрямую писать ui->opissim->setText("балалаалл");

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

а что есть в этом слоте вызвать другой слот, например, myslot2 и передать туда уже qstring ?


Название: Re: вызов слота из Qtextedit
Отправлено: V1KT0P от Апрель 01, 2012, 15:28
Да, он самый )
пробовал даже напрямую писать ui->opissim->setText("балалаалл");

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

а что есть в этом слоте вызвать другой слот, например, myslot2 и передать туда уже qstring ?
Выложи минимальный проект с багом и тебе сразу помогут.


Название: Re: вызов слота из Qtextedit
Отправлено: jatsuk от Апрель 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

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

Приложил проект.


Название: Re: вызов слота из Qtextedit
Отправлено: V1KT0P от Апрель 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));


Название: Re: вызов слота из Qtextedit
Отправлено: jatsuk от Апрель 07, 2012, 05:34
Спасибо, всё заработало наконец то

Кстати можно без строки html, просто
ui->opissim->setHtml(textopis);
TextBroser всё равно добавит свои HTML стили