簡體   English   中英

QGroupBox如何支持HTML?

[英]How to support HTML for QGroupBox?

當我們設置時,我需要創建一個支持 HTML 文本的組框

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

我嘗試了一些搜索但沒有結果。 現在在我的腦海中,我只想為我的 groupbox 設置樣式。 像這樣的東西:

我的組框.cpp

MyGroupBox::MyGroupBox( QWidget *p_parent ) : QGroupBox( p_parent )
{
  setStyle( &m_style );
}

標題樣式.hpp

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

標題樣式.cpp

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很奇怪,但這就是我現在的想法。 誰能告訴我我是否朝着正確的方向前進? 如果是,我該如何更改 class TitleStyle 如果沒有,我該怎么辦?

解決方案:我花了一段時間才發現我的錯誤。 使用上面的代碼,標題應該是已經支持的富文本。

主窗口.h

#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

主窗口.cpp

#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;
}

結果:

在此處輸入圖像描述

實際上,我在其他職位上發現了我的錯誤。 使用此代碼,標題應該是已經支持的富文本。 我已經嘗試使用 Qt Creator 並且它有效。 我在上面更新了我的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM