QtのコンボボックスQComboBoxカスタムカラー選択ボックス

Qtのコンボボックスをカスタマイズするためのプロジェクトの開発が必要で、各項目はの効果を達成するために、RGBの色を選択するようにユーザに表示されます

QColorCombobox.h

#pragma一度
の#include <にQLineEdit> 
書式#include <QCombobox> クラスQLabel。
クラスQListWidget; クラス QColorWidget:公衆にQLineEdit 
{ 
Q_OBJECTの公共
    QColorWidget(QWidgetの *親= Q_NULLPTR)。
    QColorWidget(); 無効(updateColor のconst QColor&カラー)。 mousePressEvent(QMouseEvent * イベント)。
信号:無効クリック(のconst QColor&カラー)。
民間






    

    

    
    QLabel * m_pLabel。
    QLabel * m_pRgbLabel。
    QColorのm_color。
}。

クラス QColorCombobox:公共QComboBox 
{ 
    Q_OBJECTの
公共
    QColorCombobox(QWidgetの *親= Q_NULLPTR)。
    QColorCombobox(); 

    無効(appendItemのconstの QColor&カラー)。

プライベートスロット:
     無効 onClickColorWidget(のconst QColor&カラー)。
プライベート
    QColorWidget * * m_pLineEdit。
    QListWidget m_pListWidget; 
}。

QColorCombobox.cpp

#include " QColorCombobox.h " 
の#include <QLabel> 
書式#include <QHBoxLayout> 
書式#include <QListWidget> 

QColorWidget :: QColorWidget(QWidgetの *親/ * = Q_NULLPTR * / 
    :にQLineEdit(親)
    、m_color(25500 
{ 
    m_pLabel = 新しい QLabel(
    m_pRgbLabelは = 新しい QLabel(これを)。

    m_pLabel - > setFixedSize(1515); 

    QHBoxLayout *レイアウト= 新しいQHBoxLayout(); 
    レイアウト - > addWidget(m_pLabel)。
    レイアウト - > addWidget(m_pRgbLabel)。
    レイアウト - > setContentsMargins(5002 )。
    setLayoutの(レイアウト)。
    ます。またsetReadOnly(真の); 

    setStyleSheet(" 国境:なし" ); 
} 


QColorWidget ::QColorWidget()
{ 

} 

ボイド QColorWidget :: updateColor(CONST QColor&カラー)
{ 
    m_color = 色。

    QStringのstrstyle = QStringの(" 境界:1ピクセルベタ黒、背景色:RGB(%1、%2%3); " ).arg(QStringの::数(color.red())、QStringの::数( color.green())、QStringの::数(color.blue())); 
    QStringのstrText = QStringの(" %1、%2%3 " ).arg(QStringの::数(color.red())、QStringの::数(color.green())、QStringの::数(色。青い())); 
    m_pLabel - > setStyleSheet(strstyle)。
    m_pRgbLabel - > のsetText(strText); 
} 

無効 QColorWidget :: mousePressEvent(QMouseEvent * イベント
{ 
    EMITクリック(m_color); 
} 




QColorCombobox :: QColorCombobox(QWidgetの *親/ * = Q_NULLPTR * / 
    :QComboBox(親)
{ 
    m_pLineEdit = 新しい新しい QColorWidget(この); 
    m_pListWidget = 新しい新しい QListWidget(この); 
    setContextMenuPolicy(Qtの:: NoContextMenu); // 無効メニュー 
    m_pListWidget-> setVerticalScrollBarPolicy(Qtの:: ScrollBarAlwaysOff); // 無効に垂直スクロールバー 
    m_pListWidget-> setStyleSheet(" QListWidget ::アイテム:ホバー{背景色:RGB(0125255);} "); 
    setLineEdit(m_pLineEdit)。
    setModel(m_pListWidget - > モデル()); 
    setviewコマンド(m_pListWidget)。

} 

QColorCombobox ::QColorCombobox()
{ 
} 

ボイド QColorCombobox :: appendItemの(CONST QColor&色)
{ 
    QColorWidget * PWID = 新しい QColorWidget(
    PWID - > updateColor(色)。
    CONNECT(PWID、SIGNAL((クリックconstの QColor&))を、この、SLOT(onClickColorWidget(のconst QColor& ))); 
    QListWidgetItem* pItem = 新しいQListWidgetItem(m_pListWidget)。
    
    m_pListWidget - > のaddItem(pItem)。
    m_pListWidget - > setItemWidget(pItem、PWID)。

} 

ボイド QColorCombobox :: onClickColorWidget(CONST QColor&色)
{ 
    m_pLineEdit - > updateColor(色)。
    hidePopup(); 
}

MainWindow.cpp

.... 

    ui.comboBox - > appendItemの(QColor(25500 )); 
    ui.comboBox - > appendItemの(QColor(2552550 )); 
    ui.comboBox - > appendItemの(QColor(2550255 )); 
    ui.comboBox - > appendItemの(QColor(0255255 )); 
    ui.comboBox - > appendItemの(QColor(02550 )); 

...

 

おすすめ

転載: www.cnblogs.com/chechen/p/12219644.html