C++ 如何支持QGroupBox的HTML?

C++ 如何支持QGroupBox的HTML?,c++,qt,qgroupbox,C++,Qt,Qgroupbox,我需要创建一个组框,当我们设置 MyGroupBox *gb = new MyGroupBox(); gb->setTitle("<u> This is underlined text</u>"); TitleStyle.hpp MyGroupBox::MyGroupBox( QWidget *p_parent ) : QGroupBox( p_parent ) { setStyle( &m_style ); } class TitleStyle :

我需要创建一个组框,当我们设置

MyGroupBox *gb = new MyGroupBox();
gb->setTitle("<u> This is underlined text</u>");
TitleStyle.hpp

MyGroupBox::MyGroupBox( QWidget *p_parent ) : QGroupBox( p_parent )
{
  setStyle( &m_style );
}
class TitleStyle : public QProxyStyle
{
public:
  TitleStyle() = default;
  virtual void drawComplexControl( ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = nullptr ) const override;
};
void TitleStyle::drawComplexControl( ComplexControl p_control, const QStyleOptionComplex *p_option, QPainter *p_painter, const QWidget *p_widget ) const
{
  if ( p_control == CC_GroupBox )
  {
     if ( const QStyleOptionGroupBox *title = qstyleoption_cast<const QStyleOptionGroupBox *>( p_option ) )
     {
           QTextDocument td;
           td.setHtml( title->text );
           td.drawContents( p_painter );
     }
  }
  else
  {
     QProxyStyle::drawComplexControl( p_control, p_option, p_painter, p_widget );
  }
}
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTextDocument>

void TitleStyle::drawComplexControl( ComplexControl p_control, const QStyleOptionComplex *p_option, QPainter *p_painter, const QWidget *p_widget ) const
{
  if ( p_control == CC_GroupBox )
  {
     if ( const QStyleOptionGroupBox *title = qstyleoption_cast<const QStyleOptionGroupBox *>( p_option ) )
     {
           QTextDocument td;
           td.setHtml( title->text );
           td.drawContents( p_painter );
     }
  }
  else
  {
     QProxyStyle::drawComplexControl( p_control, p_option, p_painter, p_widget );
  }
}

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
, ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->groupBox->setStyle(&m_style);
    ui->groupBox->setTitle("<b><u>This is an underlined title</u></b>");
}

MainWindow::~MainWindow()
{
    delete ui;
}
标题样式.cpp

MyGroupBox::MyGroupBox( QWidget *p_parent ) : QGroupBox( p_parent )
{
  setStyle( &m_style );
}
class TitleStyle : public QProxyStyle
{
public:
  TitleStyle() = default;
  virtual void drawComplexControl( ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = nullptr ) const override;
};
void TitleStyle::drawComplexControl( ComplexControl p_control, const QStyleOptionComplex *p_option, QPainter *p_painter, const QWidget *p_widget ) const
{
  if ( p_control == CC_GroupBox )
  {
     if ( const QStyleOptionGroupBox *title = qstyleoption_cast<const QStyleOptionGroupBox *>( p_option ) )
     {
           QTextDocument td;
           td.setHtml( title->text );
           td.drawContents( p_painter );
     }
  }
  else
  {
     QProxyStyle::drawComplexControl( p_control, p_option, p_painter, p_widget );
  }
}
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTextDocument>

void TitleStyle::drawComplexControl( ComplexControl p_control, const QStyleOptionComplex *p_option, QPainter *p_painter, const QWidget *p_widget ) const
{
  if ( p_control == CC_GroupBox )
  {
     if ( const QStyleOptionGroupBox *title = qstyleoption_cast<const QStyleOptionGroupBox *>( p_option ) )
     {
           QTextDocument td;
           td.setHtml( title->text );
           td.drawContents( p_painter );
     }
  }
  else
  {
     QProxyStyle::drawComplexControl( p_control, p_option, p_painter, p_widget );
  }
}

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
, ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->groupBox->setStyle(&m_style);
    ui->groupBox->setTitle("<b><u>This is an underlined title</u></b>");
}

MainWindow::~MainWindow()
{
    delete ui;
}
main window.cpp

MyGroupBox::MyGroupBox( QWidget *p_parent ) : QGroupBox( p_parent )
{
  setStyle( &m_style );
}
class TitleStyle : public QProxyStyle
{
public:
  TitleStyle() = default;
  virtual void drawComplexControl( ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = nullptr ) const override;
};
void TitleStyle::drawComplexControl( ComplexControl p_control, const QStyleOptionComplex *p_option, QPainter *p_painter, const QWidget *p_widget ) const
{
  if ( p_control == CC_GroupBox )
  {
     if ( const QStyleOptionGroupBox *title = qstyleoption_cast<const QStyleOptionGroupBox *>( p_option ) )
     {
           QTextDocument td;
           td.setHtml( title->text );
           td.drawContents( p_painter );
     }
  }
  else
  {
     QProxyStyle::drawComplexControl( p_control, p_option, p_painter, p_widget );
  }
}
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTextDocument>

void TitleStyle::drawComplexControl( ComplexControl p_control, const QStyleOptionComplex *p_option, QPainter *p_painter, const QWidget *p_widget ) const
{
  if ( p_control == CC_GroupBox )
  {
     if ( const QStyleOptionGroupBox *title = qstyleoption_cast<const QStyleOptionGroupBox *>( p_option ) )
     {
           QTextDocument td;
           td.setHtml( title->text );
           td.drawContents( p_painter );
     }
  }
  else
  {
     QProxyStyle::drawComplexControl( p_control, p_option, p_painter, p_widget );
  }
}

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
, ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->groupBox->setStyle(&m_style);
    ui->groupBox->setTitle("<b><u>This is an underlined title</u></b>");
}

MainWindow::~MainWindow()
{
    delete ui;
}
#包括“mainwindow.h”
#包括“ui_main window.h”
#包括
无效标题样式::drawComplexControl(ComplexControl p_控件、常量QStyleOptionComplex*p_选项、QPaint*p_画师、常量QWidget*p_小部件)常量
{
if(p_control==CC_GroupBox)
{
if(常量QStyleOptionGroupBox*title=qstyleoption\U cast(p\U选项))
{
QTextTD文件;
td.setHtml(标题->文本);
td.图纸内容(p_painter);
}
}
其他的
{
QProxyStyle::drawComplexControl(p_控件、p_选项、p_画师、p_小部件);
}
}
MainWindow::MainWindow(QWidget*parent):QMainWindow(parent)
,ui(新ui::Main窗口)
{
用户界面->设置用户界面(此);
ui->groupBox->setStyle(&m_样式);
ui->groupBox->setTitle(“这是带下划线的标题”);
}
MainWindow::~MainWindow()
{
删除用户界面;
}
结果:


事实上,我在其他职位上发现了我的错误。有了这段代码,标题应该已经是富文本支持的了。我试过使用Qt Creator,效果很好。我更新了上面的解决方案。

将您的答案添加为已接受的答案,这样它就不会出现在未回答的问题上。:)