mytableview.cpp
来自「Qt开发的GRE背单词软件」· C++ 代码 · 共 85 行
CPP
85 行
#include <QtSql/QSqlQuery>
#include <QtGui>
#include "MyTableView.h"
MyTableView::MyTableView(QWidget *parent) : QTableView(parent) {}
MyTableView::~MyTableView() {
saveSectionSizes();
}
void MyTableView::loadSectionSizes()
{
QSqlQuery query;
query.exec(tr("SELECT section, size FROM SectionSizes WHERE tableName = \'%1\'")
.arg(tableName));
while(query.next())
sizes[query.value(0).toInt()] = query.value(1).toDouble();
if(sizes.empty())
{
sizes[1] = 0.25;
sizes[2] = 0.5;
}
}
void MyTableView::saveSectionSizes()
{
QSqlQuery query;
query.exec(tr("DELETE FROM SectionSizes WHERE tableName = \'%1\'").arg(tableName));
for(int i=0; i<horizontalHeader()->count(); ++i)
query.exec(tr("INSERT INTO SectionSizes VALUES(\'%1\', %2, %3)")
.arg(tableName)
.arg(i)
.arg((float)horizontalHeader()->sectionSize(i) / width()));
}
void MyTableView::slotSetSectionSizes(int section, int /*oldSize*/, int newSize) {
sizes[section] = (float)newSize / width();
}
void MyTableView::setTableName(const QString& table)
{
if(!tableName.isEmpty() && table != tableName)
saveSectionSizes(); // save last table
tableName = table;
loadSectionSizes();
slotResizeSections();
}
void MyTableView::slotResizeSections()
{
disconnect(horizontalHeader(), SIGNAL(sectionResized(int, int, int)),
this, SLOT(slotSetSectionSizes(int, int, int)));
resizeSections(sizes);
connect(horizontalHeader(), SIGNAL(sectionResized(int, int, int)),
this, SLOT(slotSetSectionSizes(int, int, int)));
}
void MyTableView::resizeSections(Map& map)
{
int lastNoneZero;
for(lastNoneZero=map.size()-1; lastNoneZero>=0 && map[lastNoneZero]==0; --lastNoneZero)
;
for(size_t section=0; section<map.size(); ++section)
if(map[section] != 0 && section != lastNoneZero) // ignore last non-0 section
setColumnWidth(section, map[section] * width());
hideColumn(0);
hideColumn(4);
hideColumn(5);
hideColumn(6);
}
void MyTableView::resizeEvent(QResizeEvent* event)
{
slotResizeSections();
QTableView::resizeEvent(event);
}
void MyTableView::mousePressEvent(QMouseEvent* event)
{
QTableView::mousePressEvent(event);
if(event->button() == Qt::MidButton)
emit midClicked();
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?