QT封装的QComboBox类,只实现了简单框架,现在添加一些其他功能如图:
目录
直接上代码:
Class ComboBox_Table
(ComboBox类是我自己封装的,主要是非下拉框图标上图片的显示,内容不多,可以自己写)
(重要的用“//!!”表示)
ComboBox_Table::ComboBox_Table(QWidget *parent)
:ComboBox(parent)
{
}
ComboBox_Table::ComboBox_Table(QWidget *parent, const QColor &background, const QColor &pen)
:ComboBox(parent, background, pen)
{
}
//主要构造函数
ComboBox_Table::ComboBox_Table(const QString &text, QWidget *parent, QPixmap *beforePix, QPixmap *afterPix)
:ComboBox(text, parent, beforePix, afterPix)
{
pView = new C_TableView(this);
pModel = new QStandardItemModel( this);
//!!
this->setView(pView); //设置显示iew
this->setModel(pModel); //设置模型
setIconSize(QSize(30, 30)); //设置下拉框你的图标
}
ComboBox_Table::~ComboBox_Table()
{
QMutableListIterator<QStandardItem *> iterator(List_Item);
QStandardItem *item;
for(iterator.toFront(); iterator.hasNext();)
{
item = iterator.next();
delete(item);
}
}
ComboBox_Table::C_TableView::C_TableView(QWidget *parent)
:QTableView(parent)
{
horizontalHeader()->setVisible(false);
verticalHeader()->setVisible(false);
setAlternatingRowColors(true);
}
void ComboBox_Table::insertItem(int row, int col, const QString & text, const QVariant & userData)
{
int i_Rowcount = pModel->rowCount();
int i_ColumnCount = pModel->columnCount();
if(row + 1 > i_Rowcount)
pModel->insertRows(i_Rowcount, row + 1 - i_Rowcount);
if(col + 1 > i_ColumnCount)
pModel->insertColumns(i_ColumnCount, col + 1 - i_ColumnCount);
pModel->setData(pModel->index(row, col), QVariant(text));
}
//!!设置:QStandardItem,达到在下拉框单项里添加图标
void ComboBox_Table::insertItem(int row, int col, const QIcon & icon, const QString & text, const QVariant & userData)
{
int i_Rowcount = pModel->rowCount();
int i_ColumnCount = pModel->columnCount();
if(row + 1 > i_Rowcount)
pModel->insertRows(i_Rowcount, row + 1 - i_Rowcount);
if(col + 1 > i_ColumnCount)
pModel->insertColumns(i_ColumnCount, col + 1 - i_ColumnCount);
Item = new QStandardItem(icon, text);
Item->setFont(QFont("wqy-microhei", 15));
List_Item<<Item;
pModel->setItem(row, col, Item);
}
Class ComboBox_Table 的头文件
class ComboBox_Table : public ComboBox
{
Q_OBJECT
public:
ComboBox_Table(QWidget *parent);
ComboBox_Table(QWidget *parent, const QColor &background, const QColor &pen);
ComboBox_Table(const QString &text, QWidget *parent, QPixmap *beforePix, QPixmap *afterPix = NULL);
~ComboBox_Table();
void insertItem(int row, int col, const QString & text, const QVariant & userData = QVariant());
//设置带图标的下拉框条目
void insertItem(int row, int col, const QIcon & icon, const QString & text, const QVariant & userData = QVariant());
//更改下拉框里显示的图标
void chgIcon(int row, int col, const QIcon &icon, const QString &text);
void setItemWidth(int width);
void setItemHeight(int Height);
protected:
private:
//下拉框table
class C_TableView : public QTableView
{
public:
C_TableView(QWidget *parent = 0);
~C_TableView(){};
protected:
};
C_TableView *pView;
QStandardItemModel *pModel;
QList<QStandardItem *> List_Item;
QStandardItem *Item;
};
结束:
函数内容不多,主要在于对框架的理解,后续有需要可以自己封装。总的来书还是很实用的。绑定槽函数就一般了: connect(pCmbOtherTools->view(), SIGNAL(pressed(const QModelIndex &)), gpWin, SLOT(SlotOtherTools(const QModelIndex &)));