QString MainWindow::HtmlFromXml(const QString &xmlFileName)
{
QFile file(xmlFileName);
if (!file.open(QIODevice::ReadOnly)) {
qDebug() << "Cant open file: " << file.errorString();
return "";
}
QDomDocument htmlDoc;
QDomElement htmlRoot = htmlDoc.createElement("html");
QDomDocument xmlDoc;
xmlDoc.setContent(&file);
QDomElement xmlRoot = xmlDoc.documentElement();
QDomElement xmlItem = xmlRoot.firstChild().toElement();
while(!xmlItem.isNull())
{
//read xml
int itemId = xmlItem.attribute("id", "0").toInt();
QString itemName = xmlItem.attribute("Name", "");
QDomElement xmlImg = xmlItem.firstChild().toElement();
QString imgSrc;
int imgId = 0;
if (!xmlImg.isNull()) {
imgSrc = xmlImg.attribute("src", "");
imgId = xmlImg.attribute("id", "0").toInt();
}
//create html
QDomElement htmlItem = htmlDoc.createElement("p");
QDomElement htmlImg = htmlDoc.createElement("img");
htmlImg.setAttribute("src", imgSrc);
QDomElement htmlText = htmlDoc.createElement("p");
QDomText textName = htmlDoc.createTextNode(itemName);
htmlText.appendChild(textName);
htmlItem.appendChild(htmlImg);
htmlItem.appendChild(htmlText);
htmlRoot.appendChild(htmlItem);
//next
xmlItem = xmlItem.nextSibling().toElement();
}
htmlDoc.appendChild(htmlRoot);
return htmlDoc.toString();
}
Затем установите html, который вы получили в QTextEdit
QString strHtml = HtmlFromXml(fileName);
ui->textEdit->setHtml(strHtml);
Теперь вы можете редактировать в QTextEdit
. Перед сохранением необходимо получить html из QTextEdit
QString strHtml = ui->textEdit->toHtml();
QString strXml = XmlFromHtml(strHtml);
и преобразовать этот html в xml
QString MainWindow::XmlFromHtml(const QString &strHtml)
{
QDomDocument xmlDoc;
QDomElement xmlRoot = xmlDoc.createElement("Stage");
QDomDocument htmlDoc;
htmlDoc.setContent(strHtml);
QDomElement htmlRoot = htmlDoc.documentElement();
QDomElement htmlHead = htmlRoot.firstChild().toElement();
QDomElement htmlBody = htmlHead.nextSibling().toElement();
int dummyId = 1;
QDomElement htmlItem = htmlBody.firstChild().toElement();
while (!htmlItem.isNull())
{
//<p><img/></p><p>text</p>
QDomElement htmlImg = htmlItem.firstChild().toElement();
QString imgSrc = htmlImg.attribute("src", "");
htmlItem = htmlItem.nextSibling().toElement(); //move to <p> with text
QDomText itemText = htmlItem.firstChild().toText();
//create xml elements
QDomElement xmlItem = xmlDoc.createElement("Item");
xmlItem.setAttribute("id", dummyId);
xmlItem.setAttribute("Name", itemText.data());
QDomElement xmlImg = xmlDoc.createElement("image");
xmlImg.setAttribute("src", imgSrc);
xmlImg.setAttribute("id", dummyId);
xmlItem.appendChild(xmlImg);
xmlRoot.appendChild(xmlItem);
//next
htmlItem = htmlItem.nextSibling().toElement();
dummyId++;
}
xmlDoc.appendChild(xmlRoot);
return xmlDoc.toString();
}
, а затем сохранить в текстовый файл.
Примечание: QTextEdit
позволяют редактировать текст, но имеют некоторые проблемы с изображениями. Вы можете удалять или копировать / вставлять изображения внутри QTextEdit
, но не можете вставлять изображения из внешнего буфера обмена. Это потому, что QTextEdit
работает с текстовым тегом <img/>
, а не с изображением. Чтобы редактировать ваши изображения внутри QTextEdit
, вам нужно отредактировать текст HTML вашего экземпляра QTextEdit
.
Я просто пытаюсь получить текущий доменный контекст, связанный с рабочим пользователем:
try {
var domain = Domain.GetCurrentDomain();
/* Whatever i need from the domain */
} catch(ActiveDirectoryOperationException ex) {
MessageBox.Show("Cannot contact AD Server");
}
Если Вы хотите соединиться с другим доменом, можно попробовать:
try {
var domain = Domain.GetDomain(
new DirectoryContext(DirectoryContextType.Domain, "mydomain.local"));
/* Whatever i need from the domain */
} catch(ActiveDirectoryOperationException ex) {
MessageBox.Show("Cannot contact AD Server");
}