前言
上一章讲了使用setIndexWidget可以在表格中添加控件,当我们需要获取到点QCheckBox 控件在表格中的位置
一、核心代码
在生成控件的时候绑定信号
QCheckBox *tempComboBox1 = new QCheckBox(this);
tempComboBox1->setText("Yes");
ui->tableView->setIndexWidget(m_modelProxy.index(1, 3), tempComboBox1);
connect(tempComboBox1 , SIGNAL(stateChanged(int)) , this , SLOT(changTableButton(int)));
槽函数中获取坐标
void Widget::changTableButton(int state)
{
QCheckBox *senderObj = qobject_cast<QCheckBox*>(sender());
if(senderObj == nullptr){
return;
}
if(Qt::Checked == state){
qDebug() << "checked";
}else if(Qt::Unchecked == state){
qDebug() << "Unchecked";
}
int x = senderObj->frameGeometry().x();
int y = senderObj->frameGeometry().y();
QModelIndex index = ui->tableView->indexAt(QPoint(x, y));
int row = index.row();
int column = index.column();
qDebug() << "row:" << row << "column:" << column;
}
二、全部代码
头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QStringList>
#include <QStandardItemModel>
#include <QSortFilterProxyModel>
#include <QCheckBox>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
void initHearder();
void addData();
void rmData(int count);
private slots:
void findData();
void changTableButton(int state);
private:
Ui::Widget *ui;
QStringList m_headerList;
QStandardItemModel m_tableModel;
QSortFilterProxyModel m_modelProxy;
};
#endif // WIDGET_H
源文件
#include <QComboBox>
#include <QDebug>
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
initHearder();
addData();
connect(ui->lineEdit, SIGNAL(textChanged(QString)),
this, SLOT(findData()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::initHearder()
{
m_headerList << "name" << "class" << "gender" << "key" << "go" << " ";
m_modelProxy.setSourceModel(&m_tableModel);
ui->tableView->setModel(&m_modelProxy);
m_tableModel.setHorizontalHeaderLabels(m_headerList);
}
void Widget::addData()
{
m_tableModel.setItem(0, 0, new QStandardItem("jin"));
m_tableModel.setItem(0, 1, new QStandardItem("1.2"));
m_tableModel.setItem(0, 2, new QStandardItem("1"));
m_tableModel.setItem(1, 0, new QStandardItem("hu"));
m_tableModel.setItem(1, 1, new QStandardItem("1.1"));
m_tableModel.setItem(1, 2, new QStandardItem("0"));
m_tableModel.setItem(2, 0, new QStandardItem("wang"));
m_tableModel.setItem(2, 1, new QStandardItem("1.1"));
m_tableModel.setItem(2, 2, new QStandardItem("0"));
m_tableModel.setItem(3, 0, new QStandardItem("li"));
m_tableModel.setItem(3, 1, new QStandardItem("1.1"));
m_tableModel.setItem(3, 2, new QStandardItem("1"));
QCheckBox *tempComboBox = new QCheckBox(this);
tempComboBox->setText("Yes");
ui->tableView->setIndexWidget(m_modelProxy.index(0, 3), tempComboBox);
//connect(tempComboBox , SIGNAL(clicked()) , this , SLOT(changTableButton()));
connect(tempComboBox , SIGNAL(stateChanged(int)) , this , SLOT(changTableButton(int)));
QCheckBox *tempComboBox1 = new QCheckBox(this);
tempComboBox1->setText("Yes");
ui->tableView->setIndexWidget(m_modelProxy.index(1, 3), tempComboBox1);
connect(tempComboBox1 , SIGNAL(stateChanged(int)) , this , SLOT(changTableButton(int)));
}
void Widget::rmData(int count)
{
m_tableModel.removeColumn(count);
}
void Widget::findData()
{
m_modelProxy.setFilterFixedString(ui->lineEdit->text());
return;
}
void Widget::changTableButton(int state)
{
QCheckBox *senderObj = qobject_cast<QCheckBox*>(sender());
if(senderObj == nullptr){
return;
}
if(Qt::Checked == state){
qDebug() << "checked";
}else if(Qt::Unchecked == state){
qDebug() << "Unchecked";
}
int x = senderObj->frameGeometry().x();
int y = senderObj->frameGeometry().y();
QModelIndex index = ui->tableView->indexAt(QPoint(x, y));
int row = index.row();
int column = index.column();
qDebug() << "row:" << row << "column:" << column;
}