首页 技术 正文
技术 2022年11月22日
0 收藏 648 点赞 3,080 浏览 19567 个字

在QTableView的一列里添加两个按钮,之前添加一个按钮的思路是一样的,只是计算了一下按钮的宽,放两个按钮而已。

添加一个按钮的例子:QTableView 添加按钮

本例源代码:QtTowButtons.rar

看一下列的效果

QTableView 一列添加两个按钮

看一下添加两个按钮的效果点击第一个按钮弹出 but1 +当前列 点击第二个按钮弹出but2 + 当前行

QTableView 一列添加两个按钮aaarticlea/png;base64,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” alt=”” width=”316″ height=”199″ />

下面是主要实现

继承自 QItemDelegate

主要是实现 了它的painter方法,把两个自定义的按钮绘制到视图并保存

还有editorEvent事件,用来处理点击事件,在点击时我们算一下鼠标的坐标在哪个按钮下,

再处理相应的点击事件

#ifndef BUTTONDELEGATE_H
#define BUTTONDELEGATE_H#include <QItemDelegate>class ButtonDelegate : public QItemDelegate
{
Q_OBJECT
public:
explicit ButtonDelegate(QObject *parent = );
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index);signals:public slots:private:
void showMsg(QString str);private: typedef QMap<QModelIndex, QPair<QStyleOptionButton*, QStyleOptionButton*>* > collButtons;
collButtons m_btns;};#endif // BUTTONDELEGATE_H

按钮的具体实现

#include "buttondelegate.h"#include <QApplication>
#include <QMouseEvent>
#include <QMessageBox>
#include <QPainter>
#include <QStyleOption>
#include <QDesktopWidget>ButtonDelegate::ButtonDelegate(QObject *parent) :
QItemDelegate(parent)
{
}void ButtonDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QPair<QStyleOptionButton*, QStyleOptionButton*>* buttons = m_btns.value(index);
if (!buttons) {
QStyleOptionButton* button1 = new QStyleOptionButton();
//button1->rect = option.rect.adjusted(4, 4, -(option.rect.width() / 2 + 4) , -4); //
button1->text = "X";
button1->state |= QStyle::State_Enabled; QStyleOptionButton* button2 = new QStyleOptionButton();
//button2->rect = option.rect.adjusted(button1->rect.width() + 4, 4, -4, -4);
button2->text = "Y";
button2->state |= QStyle::State_Enabled;
buttons =new QPair<QStyleOptionButton*, QStyleOptionButton*>(button1, button2);
(const_cast<ButtonDelegate *>(this))->m_btns.insert(index, buttons);
}
buttons->first->rect = option.rect.adjusted(, , -(option.rect.width() / + ) , -); //
buttons->second->rect = option.rect.adjusted(buttons->first->rect.width() + , , -, -);
painter->save(); if (option.state & QStyle::State_Selected) {
painter->fillRect(option.rect, option.palette.highlight()); }
painter->restore();
QApplication::style()->drawControl(QStyle::CE_PushButton, buttons->first, painter);
QApplication::style()->drawControl(QStyle::CE_PushButton, buttons->second, painter);
}bool ButtonDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
{
if (event->type() == QEvent::MouseButtonPress) { QMouseEvent* e =(QMouseEvent*)event; if (m_btns.contains(index)) {
QPair<QStyleOptionButton*, QStyleOptionButton*>* btns = m_btns.value(index);
if (btns->first->rect.contains(e->x(), e->y())) {
btns->first->state |= QStyle::State_Sunken;
}
else if(btns->second->rect.contains(e->x(), e->y())) {
btns->second->state |= QStyle::State_Sunken;
}
}
}
if (event->type() == QEvent::MouseButtonRelease) {
QMouseEvent* e =(QMouseEvent*)event; if (m_btns.contains(index)) {
QPair<QStyleOptionButton*, QStyleOptionButton*>* btns = m_btns.value(index);
if (btns->first->rect.contains(e->x(), e->y())) {
btns->first->state &= (~QStyle::State_Sunken);
showMsg(tr("btn1 column %1").arg(index.column()));
} else if(btns->second->rect.contains(e->x(), e->y())) {
btns->second->state &= (~QStyle::State_Sunken);
showMsg(tr("btn2 row %1").arg(index.row()));
}
}
}
}void ButtonDelegate::showMsg(QString str)
{
QMessageBox msg;
msg.setText(str);
msg.exec();
}

好了自定义按钮处理完了

我们建一个Table添加一些数据

#ifndef TABLEMODEL_H
#define TABLEMODEL_H#include <QAbstractTableModel>class TableModel : public QAbstractTableModel
{
Q_OBJECT
public:
explicit TableModel(QObject *parent = );
int rowCount(const QModelIndex &parent) const;
int columnCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
Qt::ItemFlags flags(const QModelIndex &index) const;
void setHorizontalHeader(const QStringList& headers);
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
void setData(const QVector<QStringList>& data);
QVector<QStringList>& DataVector() {return m_data;}
~TableModel(void);signals:public slots:private:
QStringList m_HorizontalHeader;
QVector<QStringList> m_data;
};#endif // TABLEMODEL_H

model的实现 并添加一些数据

#include "tablemodel.h"TableModel::TableModel(QObject *parent) :
QAbstractTableModel(parent)
{
}TableModel::~TableModel()
{}int TableModel::rowCount(const QModelIndex &parent) const
{
return m_data.size();
}int TableModel::columnCount(const QModelIndex &parent) const
{
return m_HorizontalHeader.count();
}QVariant TableModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (role == Qt::DisplayRole) {
int ncol = index.column();
int nrow = index.row();
QStringList values = m_data.at(nrow);
if (values.size() > ncol)
return values.at(ncol);
else
return QVariant();
}
return QVariant();
}Qt::ItemFlags TableModel::flags(const QModelIndex &index) const
{
if (!index.isValid())
return Qt::NoItemFlags; Qt::ItemFlags flag = QAbstractItemModel::flags(index); // flag|=Qt::ItemIsEditable // 设置单元格可编辑,此处注释,单元格无法被编辑
return flag;
}void TableModel::setHorizontalHeader(const QStringList &headers)
{
m_HorizontalHeader = headers;
}QVariant TableModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
return m_HorizontalHeader.at(section);
}
return QAbstractTableModel::headerData(section, orientation, role);
}void TableModel::setData(const QVector<QStringList> &data)
{
m_data = data;
}

TableView的实现,和model关联

#ifndef TABLEVIEW_H
#define TABLEVIEW_H#include <QTableView>
#include "tablemodel.h"
#include "buttondelegate.h"class TableView : public QTableView
{
Q_OBJECT
public:
explicit TableView(QWidget *parent = );
TableModel* tableModel() {return m_model;} ~TableView();signals:public slots:private:
void iniData();private:
TableModel *m_model;
ButtonDelegate *m_buttonDelegate;};#endif // TABLEVIEW_H
#include "tableview.h"#include "tablemodel.h"
#include "buttondelegate.h"TableView::TableView(QWidget *parent) :
QTableView(parent)
{
iniData();
}TableView::~TableView()
{
delete m_model;
}void TableView::iniData()
{
m_model = new TableModel();
this->setModel(m_model);
QStringList headers;
headers << "Id" << "Progress";
m_model->setHorizontalHeader(headers); QVector<QStringList> data;
data.append(QStringList() << "" << "");
data.append(QStringList() << "" << "");
data.append(QStringList() << "" << "");
data.append(QStringList() << "" << "");
data.append(QStringList() << "" << "");
m_model->setData(data); m_buttonDelegate = new ButtonDelegate(this);
this->setItemDelegateForColumn(, m_buttonDelegate);
emit m_model->layoutChanged();
this->setColumnWidth(, );
}

这就完成了

我们看一下调用

    this->resize(, );
TableView *tv = new TableView(this);
QVBoxLayout* layout = new QVBoxLayout(); layout->addWidget(tv);
this->setLayout(layout);
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,986
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,502
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,346
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,129
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,764
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,841