Встраивание изображения в QWebView с помощью JavaScript - PullRequest
2 голосов
/ 03 марта 2010

Я пишу небольшое приложение с Qt 4.6 (64-битный Arch Linux, хотя это не должно иметь значения), которое позволяет пользователю редактировать документ, используя QWebView с включенным contentEditable. Однако по какой-то причине встраивание изображения не работает. Вот фрагмент кода:

void LeafEditView::onInsertImage()
{
    // bring up a dialog, ask for an image
    QString imagePath = QFileDialog::getOpenFileName(this,tr("Open Image File"),"/",tr("Images (*.png *.xpm *.jpg)"));
    ui->leafEditor->page()->mainFrame()->documentElement().evaluateJavaScript("document.execCommand('insertImage',null,'"+imagePath+"');");
}

Тестовое изображение действительно существует, но абсолютно ничего не происходит. Жирный шрифт / курсив / подчеркивание - все отлично работает с помощью JavaScript, но не с изображениями. Мысли? * * 1004

Ответы [ 2 ]

1 голос
/ 03 марта 2010

Убедитесь, что QWebSettings::AutoLoadImages включено.

Вы также можете попробовать: document.execCommand('insertImage',false,'"+imagePath+"');

Попробуйте использовать относительные и абсолютные пути к изображению.

И последнее, но не менее важное: разберитесь в этом примере приложения - они используют похожий метод Javascript execCommand (), они делают некоторые вещи немного по-другому, например, QUrl::fromLocalFile.

Удачи!

0 голосов
/ 07 марта 2010

Оказывается, что в WebKit есть политика не загружать ресурсы из локальной файловой системы без некоторого массажа. В моем коде у меня есть представление WebKit, которое я использую для редактирования листов в записной книжке. Следующий однострочник решил мою проблему:

 ui->leafEditor->page()->mainFrame()->setHtml("<html><head></head><body></body></html>",QUrl("file:///"));

Из того, что я обнаружил, скрываясь в архивах списков рассылки WebKit, для загрузки файлов из локальной файловой системы необходимо установить URI для file:, и это сделает работу.

...