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(255、0、0 ) { m_pLabel = 新しい QLabel(本) m_pRgbLabelは = 新しい QLabel(これを)。 m_pLabel - > setFixedSize(15、15); QHBoxLayout *レイアウト= 新しいQHBoxLayout(); レイアウト - > addWidget(m_pLabel)。 レイアウト - > addWidget(m_pRgbLabel)。 レイアウト - > setContentsMargins(5、0、0、2 )。 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(255、0、0 )); ui.comboBox - > appendItemの(QColor(255、255、0 )); ui.comboBox - > appendItemの(QColor(255、0、255 )); ui.comboBox - > appendItemの(QColor(0、255、255 )); ui.comboBox - > appendItemの(QColor(0、255、0 )); ...