2014-08-07 3 views
1

Для моей программы, я делаю QMessageBox для о разделе, и я импортировать HTML-файл, чтобы установить расположение указанного ящика:QMessageBox с HTML Layout Форматирование

// Program.cpp 
QMessageBox about; 
about.setWindowTitle(tr("About")); 

// Enable the HTML format. 
about.setTextFormat(Qt::RichText); 

// Getting the HTML from the file 
std::ifstream file("html/about.html"); 
std::string html, line; 

if (file.is_open()) 
{ 
    while (std::getline(file, line)) 
     html += line; 
} 

about.setText(html.c_str()); 
about.exec(); 

И about.html вот так:

<!-- about.html --> 
<div> 
    <h1>The Program</h1> 
    <p> Presentation </p> 
    <p> Version : 0.1.2 </p> 
    <p> <a href="www.wipsea.com">User Manual</a> </p> 
    <h4>Licence Agreement</h4> 
    <p style="border: 1px solid black; overflow: y;"> 
     Law thingy, bla and also bla, etc ... 
    </p> 
</div> 

Проблема в том, что я не знаю, что возможно, а что нет.

Например, я хочу поместить лицензионное соглашение в текстовое поле с границей и переполнением. h1 & h4 работает, но стиль для лицензионного соглашения не установлен.

Таким образом, лицензионное соглашение является простым текстом.

Есть ли способ стиля html в QMessageBox?

+0

Я считаю, что окна сообщений лучше подходят для коротких сообщений (текстов). Если вам нужно показать расширенный текст, например лицензионное соглашение, я думаю, что использование 'QTextEdit' - лучший подход. – vahancho

ответ

0

QMessageBox - это только класс удобства и не предлагает эту функцию. Вам нужно будет создать свой собственный диалог:

class HTMLMessageBox : public QDialog 
{ 
    Q_OBJECT 
public: 
    explicit HTMLMessageBox(QWidget *parent = 0); 

    void setHtml(QString html); 

private: 
    QTextEdit *m_textEdit; 
}; 


HTMLMessageBox::HTMLMessageBox(QWidget *parent) : 
    QDialog(parent) 
{ 
    m_textEdit = new QTextEdit(this); 
    m_textEdit->setAcceptRichText(true); 

    QPushButton *okButton = new QPushButton(tr("Ok")); 
    searchButton->setDefault(true); 

    QPushButton *cancelButton = new QPushButton(tr("Cancel")); 

    QDialogButtonBox *buttonBox = new QDialogButtonBox(Qt::Horizontal); 
    buttonBox->addButton(searchButton, QDialogButtonBox::AcceptRole); 
    buttonBox->addButton(cancelButton, QDialogButtonBox::RejectRole); 

    connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); 
    connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); 

    QVBoxLayout *lt = new QVBoxLayout; 
    lt->addWidget(m_textEdit); 
    lt->addWidget(buttonBox); 

    setLayout(lt); 
} 

void HTMLMessageBox::setHtml(QString html) 
{ 
    m_textEdit->setHtml(html); 
} 
+0

Он все еще не делает то, что я ожидаю. TextEdit HTML находится в контейнере с переполнением, но он содержит весь HTML. Кроме того, для корпуса лицензии нет границ. TextEdit не лучше разбирать HTML. – Romain