首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何支持QGroupBox的HTML?

如何支持QGroupBox的HTML?
EN

Stack Overflow用户
提问于 2019-11-14 07:51:55
回答 1查看 175关注 0票数 0

设置时,我需要创建一个支持HTML文本的组框

代码语言:javascript
复制
MyGroupBox *gb = new MyGroupBox();
gb->setTitle("<u> This is underlined text</u>");

我试过一些搜索,但没有结果。在我的脑海中,我现在只想为我的集体盒子设定风格。就像这样:

MyGroupBox.cpp

代码语言:javascript
复制
MyGroupBox::MyGroupBox( QWidget *p_parent ) : QGroupBox( p_parent )
{
  setStyle( &m_style );
}

TitleStyle.hpp

代码语言:javascript
复制
class TitleStyle : public QProxyStyle
{
public:
  TitleStyle() = default;
  virtual void drawComplexControl( ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = nullptr ) const override;
};

TitleStyle.cpp

代码语言:javascript
复制
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 );
  }
}

这还是行不通的。我知道我的drawComplexControl很奇怪,但这就是我现在的想法。有人能告诉我我是不是朝正确的方向走了吗?如果是,我如何更改类TitleStyle。如果没有,我该怎么办?

解决方案:我花了一段时间才发现我的错误。使用上面的代码,标题应该已经支持丰富的文本了。

MainWindow.h

代码语言:javascript
复制
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QProxyStyle>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class TitleStyle : public QProxyStyle
{
public:
    TitleStyle() = default;
    virtual void drawComplexControl( ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = nullptr ) const override;
};

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    TitleStyle m_style;
};
#endif // MAINWINDOW_H

MainWindow.cpp

代码语言:javascript
复制
#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;
}

结果:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-14 10:52:36

事实上,我在其他职位上发现了我的错误。使用此代码,标题应该已经支持丰富的文本。我试过了Qt Creator,它成功了。我在上面更新我的解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58851809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档