QT 自定义ComboBox,下拉框table样式(分列),带图标

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 &)));
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值