QGridView &QTableView

    QPushButton* btn[6];
    QWidget* centralWidget;

    centralWidget = new QWidget(this);
    centralWidget->resize(600, 400);
    centralWidget->move(20, 20);
    centralWidget->setStyleSheet("background-color:rgb(255, 255, 255); ");


    const QSize btnSize = QSize(200, 200);
    for(int i = 0; i < 6; i++)
    {
        btn[i] = new QPushButton();
        btn[i]->setText(QString::number(i));
        btn[i]->setFixedSize(btnSize); //btn[i]->resize(200, 200);不会填满宫格
    }
    btn[0]->setStyleSheet("background-color:rgb(255, 0, 0); ");
    btn[1]->setStyleSheet("background-color:rgb(0, 255, 0); ");
    btn[3]->setStyleSheet("background-color:rgb(0, 0, 255); ");


    QGridLayout *btnLayout = new QGridLayout(centralWidget);
    btnLayout->setContentsMargins(0, 0, 0, 0);
    btnLayout->setSpacing(0);
    //btn[0]->setAutoFillBackground();
    btnLayout->addWidget(btn[0], 0, 0);
    btnLayout->addWidget(btn[1], 0, 1);
    btnLayout->addWidget(btn[2], 0, 2);
    btnLayout->addWidget(btn[3], 1, 0);
    btnLayout->addWidget(btn[4], 1, 1);
    btnLayout->addWidget(btn[5], 1, 2);
    centralWidget->setLayout(btnLayout);

TableView中添加图片

void ImgDelegate::updateEditorGeometry(QWidget *editor,const QStyleOptionViewItem &option,const QModelIndex &index) const
{
    editor->setGeometry(option.rect);
}


void ImgDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
                       const QModelIndex &index) const
{

#if 0
    QStyleOptionViewItem viewOption(option);
    if (option.state.testFlag(QStyle::State_HasFocus))
        viewOption.state = viewOption.state ^ QStyle::State_HasFocus;

    if(index.column() == 0)
    {    //图片
        const QAbstractItemModel * model=index.model();
        QVariant var=model->data(index,Qt::DisplayRole);
        if(var.isNull()) var=false;
        QPixmap show;
        if (0 == index.row())
        {
            show = QPixmap("res/132.jpg");
        }
        if(1 == index.row())
        {
            show = QPixmap("res/memorandum.png");
        }


        QRect rect=option.rect;
        show = show.scaled(rect.width(), rect.height(),
                           Qt::KeepAspectRatio);
        int width=show.width();
        int height=show.height();

        int x=rect.x()+rect.width()/2-width/2;
        int y=rect.y()+rect.height()/2-height/2;

        painter->drawPixmap(x,y,show);


    }else if (index.column() == 1) {    //勾选框
//        bool d = index.model()->data(index, Qt::EditRole).toBool();
//        QStyleOptionButton checkBoxStyle;
//        checkBoxStyle.state = d ? QStyle::State_On : QStyle::State_Off;
//        checkBoxStyle.state |= QStyle::State_Enabled;
//        checkBoxStyle.iconSize = QSize(32, 32);
//        checkBoxStyle.rect = option.rect;

//        QCheckBox checkBox;
//        QApplication::style()->drawPrimitive(QStyle::PE_IndicatorCheckBox, &checkBoxStyle, painter, &checkBox);
    }else if (index.column() == 2) {    //下拉框
//        QString value = index.model()->data(index, Qt::EditRole).toString();
//        QStyleOptionComboBox comboBoxStyle;
//        comboBoxStyle.currentText = value;
//        comboBoxStyle.state |= QStyle::State_Enabled;
//        comboBoxStyle.rect = option.rect;

//        QApplication::style()->drawComplexControl(QStyle::CC_ComboBox, &comboBoxStyle, painter);
//        QApplication::style()->drawControl(QStyle::CE_ComboBoxLabel, &comboBoxStyle, painter);

    }

#endif
    QStyleOptionViewItem viewOption(option);
    //initStyleOption(&viewOption, index);

        if (option.state.testFlag(QStyle::State_HasFocus))
            viewOption.state = viewOption.state ^ QStyle::State_HasFocus;

//        // ... 省略
//        // 设置显示文本为空,使用默认样式
        QStyle *pStyle = viewOption.widget? viewOption.widget->style() : QApplication::style();

//        viewOption.text = "";
//        pStyle->drawControl(QStyle::CE_ItemViewItem, &viewOption, painter, viewOption.widget);

        // 需要显示的HTML
        QString strHTML = QString("<html> \
                                  <head> \
                                  <style> \
                                  </style> \
                                  </head> \
                                  <body>\
                                  <img src=\"res/132.jpg\" width=\"40\" height=\"40\"> \
                                  </body> \
                                  </html>");

        QTextDocument doc;
        doc.setHtml(strHTML);

        QAbstractTextDocumentLayout::PaintContext paintContext;

        QRect textRect = pStyle->subElementRect(QStyle::SE_ItemViewItemText, &viewOption);
        painter->save();
        // 坐标变换,将左上角设置为原点
        painter->translate(textRect.topLeft());
        // 设置HTML绘制区域
        painter->setClipRect(textRect.translated(-textRect.topLeft()));

        doc.documentLayout()->draw(painter, paintContext);
        painter->restore();

}

QTableView标题栏

Qt 之 QTableView 显示富文本_qtableview显示富文本_一去丶二三里的博客-CSDN博客

 提取微信聊天记录详细教程 - 知乎

QTableViewQt框架中的一个类,用于展示表格数据。要使用QTableView,需要先包含头文件#include <QTableView>和#include <QStandardItemModel>。然后创建一个QTableView对象和QStandardItemModel,并使用QTableView的setModel()函数将视图和模型对象进行绑定。 以下是一个继承QTableView的示例代码: ```cpp // .h #include <QTableView> #include <QStandardItemModel> class DBTableView : public QTableView { public: explicit DBTableView(QWidget* _parent_widget = nullptr); ~DBTableView() override; private: QStandardItemModel* db_table_model_; }; // .cpp DBTableView::DBTableView(QWidget* _parent_widget) : QTableView(_parent_widget) { db_table_model_ = new QStandardItemModel(); setModel(db_table_model_); } DBTableView::~DBTableView() {} ``` 要填充表格数据,可以使用QStandardItemModel作为表格的数据模型。每一行每一列的数据可以通过操作模型来设置。 以下是一个使用QStandardItemModel的示例代码: ```cpp // .h #include <QStandardItemModel> #include <QWidget> #include <QTableView> #include <QStandardItem> #include <QPushButton> #include <QHBoxLayout> #include <QVBoxLayout> #include <QEvent> #include <QMenu> #include <QDebug> class TableViewWidget : public QWidget { Q_OBJECT public: TableViewWidget(QWidget* parent = nullptr); ~TableViewWidget(); private: void initTableView(); private: QTableView* m_pMyTableView; QStandardItemModel* m_model; QPushButton* m_pBtnRemove; QPushButton* m_pBtnAdd; }; // .cpp TableViewWidget::TableViewWidget(QWidget* parent) : QWidget(parent) { initTableView(); } TableViewWidget::~TableViewWidget() { delete m_model; } void TableViewWidget::initTableView() { m_model = new QStandardItemModel(this); m_pMyTableView = new QTableView(this); m_pMyTableView->setModel(m_model); // 设置其他属性和布局 // 添加到布局中 QVBoxLayout* layout = new QVBoxLayout(this); layout->addWidget(m_pMyTableView); layout->addWidget(m_pBtnRemove); layout->addWidget(m_pBtnAdd); setLayout(layout); } bool TableViewWidget::eventFilter(QObject* object, QEvent* event) { // 事件过滤器的处理逻辑 // ... return false; } ``` 在创建完QTableView对象后,可以设置使用自定义菜单策略,并进行信号槽关联。下面是一个示例: ```cpp void TestTable::tableViewMenu(const QPoint& _pos) { // 响应数据处理 } void TestTable::initUI() { // ... connect(table_view, &QTableView::customContextMenuRequested, this, &TestTabel::tableViewMenu); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值