Передача значений по ссылкам в QT

Я пишу программу на С++ и qt4, которая должна генерировать различное количество (сотни) кликабельных ссылок в QTextBrowser в зависимости от данных из входных файлов.

Идея состоит в том, что когда пользователь щелкает одну из этих ссылок, значение будет передано функции с именем 'on_QTextBrowser_anchorClicked(QUrl)'.

Я создал QTextBrowser, который отображает HTML-код, и мне удается создавать разные ссылки для каждого добавленного элемента. Проблема заключается в передаче URL-адреса, определенного в href="URL" в QUrl.

Когда setOpenLinks для QTextBrowser имеет значение «true», и я печатаю URL-адрес, я получаю правильный результат. Но я не могу передать этот URL-адрес (который является значением, а не реальным URL-адресом) функции. Когда setOpenLinks имеет значение «false», функция anchorClicked(Url) передает «» в качестве URL-адреса, и здесь я хотел бы, чтобы URL-адрес был напечатан, когда setOpenLinks = true.

Как я могу этого добиться? Есть ли лучший способ (вероятно, есть) подключить различное количество (примерно от 50 до 1000) сгенерированных ссылок к функции с помощью QTextBrowser.

Мой код:

Compassindex.cpp

void CompassIndex::on_seqBrowser_anchorClicked(QUrl input)
{
    QString Input = input.toString();
    QByteArray nByte = Input.toUtf8();
    std::cerr<<Input.data();         //Print Url on the screen to ensure value is passed
}

void CompassIndex::readfile()
{
    QString Line;
    Int number_out=0;
    ...                //Imports data that will be printed in the QTextBrowser
    ...                //loop for creating links for n number of elements
    Line="<a href=\"";
    Line+=number_out;  //the value (fake Url) that I want to pass to anchorClicked()
    Line+="\">";
    Line+=nameArr[n];  //inserts the name for the link
    Line+="</a>";
    number_out++;
    ...
    ui->seqBrowser->insertHtml(Line);
    ...                //end of loop

}

Большое спасибо за Ваш ответ!


person user2820246    schedule 05.11.2013    source источник


Ответы (1)


Я использую QTextBrowser, чтобы предоставить действенный пользовательский интерфейс для pqConsole. Подробнее об этом можно прочитать в этом ответе.

Я пропускаю вызовы Пролога, и все, кажется, работает. Мой слот anchorClicked так же прост, как

void ConsoleEdit::anchorClicked(const QUrl &url) {
    query_run(url.toString());
}

Примечание. Я также определил (как фиктивный)

void ConsoleEdit::setSource(const QUrl &name) {
    qDebug() << "setSource" << name;
}

Я не трогаю setOpenLinks(), по умолчанию это true согласно документам.

person CapelliC    schedule 05.11.2013