QTableView + QSqlTableModel

1. 基础设置

database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName("data.db");
database.open();
tableview = new QTableView;
sModel = new QSqlTableModel(this,database);
sModel->setTable("table");
tableview->setModel(sModel);

2.额外设置

tableview->setSelectionBehavior(QAbstractItemView::SelectRows);//选择整行
tableview->setGridStyle(Qt::DotLine);//设置格子线
tableview->setEditTriggers(QAbstractItemView::NoEditTriggers);//禁止编辑
tableview->verticalHeader()->hide();//隐藏第一列序号
tableview->horizontalHeader()->setStretchLastSection(true);//列填充
tableview->setContextMenuPolicy(Qt::CustomContextMenu);//开启右键
tableview->verticalHeader()->setDefaultSectionSize(20);//设置默认行高
tableview->setSelectionMode(QAbstractItemView::SingleSelection);//设置单选

3.设置 点击tableivew空白处 取消选中,

根据 https://blog.csdn.net/u011288190/article/details/52838148 修改

继承QTableView 重新实现mousePressEvent

class TableView : public QTableView
{
    Q_OBJECT
public:
    explicit TableView(QWidget *parent = 0);
protected:
    void mousePressEvent(QMouseEvent *event);
signals: 
    void leftClicked();
};
TableView::TableView(QWidget* parent): QTableView(parent)
{
    
}
void TableView::mousePressEvent(QMouseEvent *event)
{
    setCurrentIndex(QModelIndex());
    QTableView::mousePressEvent(event);
    QModelIndex index = currentIndex();
    if(index.row() < 0 && index.column() <0)
    {
        emit leftClicked();
        return;   
    }
}
其他相关 http://www.jyguagua.com/?p=3653

右键区域选择

if(tableview->indexAt(p).row() == -1) return;

4.设置选中某一行 行标题字体的改变

5.qtableview 绑定每一列数据 的QSqlTableModel 数据源

6.其他相关

http://qimo601.iteye.com/blog/1539147


猜你喜欢

转载自blog.csdn.net/zr518/article/details/80270266