3,881
社区成员
发帖
与我相关
我的任务
分享
#include "widget.h"
#include "ui_widget.h"
#include <QScrollBar>
#include <QHeaderView>
#include<QAbstractItemView>
#include<QDebug>
Widget::Widget(QTableWidget *parent) :
QTableWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->tableWidget->setRowCount(10); //设置行数为10
ui->tableWidget->setColumnCount(50); //设置列数为5
// ui->tableWidget->setWindowTitle("QTableWidget & Item");
ui->tableWidget->resize(560, 250); //设置表格
QStringList header;
header<<"Month"<<"Description";
ui->tableWidget->setHorizontalHeaderLabels(header);
ui->tableWidget->setItem(0,0,new QTableWidgetItem("Jan"));
ui->tableWidget->setItem(1,0,new QTableWidgetItem("Feb"));
ui->tableWidget->setItem(2,0,new QTableWidgetItem("Mar"));
ui->tableWidget->setItem(0,1,new QTableWidgetItem(QIcon("images/IED.png"), "Jan's month"));
ui->tableWidget->setItem(1,1,new QTableWidgetItem(QIcon("images/IED.png"), "Feb's month"));
ui->tableWidget->setItem(2,1,new QTableWidgetItem(QIcon("images/IED.png"), "Mar's month"));
// ui->tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
//初始化冰冻的那个表
tableWidget1 = new QTableWidget(ui->tableWidget);
tableWidget1->setRowCount(10); //设置行数为10
tableWidget1->setColumnCount(50); //设置列数为5
tableWidget1->setHorizontalHeaderLabels(header);
tableWidget1->setItem(0,0,new QTableWidgetItem("Jan"));
tableWidget1->setItem(1,0,new QTableWidgetItem("Feb"));
tableWidget1->setItem(2,0,new QTableWidgetItem("Mar"));
tableWidget1->setItem(3,0,new QTableWidgetItem("Mar"));
tableWidget1->setItem(0,1,new QTableWidgetItem(QIcon("images/IED.png"), "Jan's month"));
tableWidget1->setItem(1,1,new QTableWidgetItem(QIcon("images/IED.png"), "Feb's month"));
tableWidget1->setItem(2,1,new QTableWidgetItem(QIcon("images/IED.png"), "Mar's month"));
tableWidget1->setFocusPolicy(Qt::NoFocus);
tableWidget1->verticalHeader()->hide();
tableWidget1->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
ui->tableWidget->viewport()->stackUnder(tableWidget1);
tableWidget1->setSelectionModel(ui->tableWidget->selectionModel());
for(int col = 2; col <50; ++col)
{
tableWidget1->setColumnHidden(col, true);
}
tableWidget1->setColumnWidth(0, ui->tableWidget->columnWidth(0));
tableWidget1->setColumnWidth(1, ui->tableWidget->columnWidth(1));
tableWidget1->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
tableWidget1->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
updateFrozenTableGeometry();
tableWidget1->show();
// updateFrozenTableGeometry();
setHorizontalScrollMode(ScrollPerPixel);
setVerticalScrollMode(ScrollPerPixel);
tableWidget1->setVerticalScrollMode(ScrollPerPixel);
connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionResized(int,int,int)), this,
SLOT(updateSectionWidth(int,int,int)));
connect(ui->tableWidget->verticalHeader(),SIGNAL(sectionResized(int,int,int)), this,
SLOT(updateSectionHeight(int,int,int)));
//实现滑块同步的程序
connect(tableWidget1->verticalScrollBar(), SIGNAL(valueChanged(int)),
ui->tableWidget->verticalScrollBar(), SLOT(setValue(int)));
connect(ui->tableWidget->verticalScrollBar(), SIGNAL(valueChanged(int)),
tableWidget1->verticalScrollBar(), SLOT(setValue(int)));
}
Widget::~Widget()
{
delete ui;
delete tableWidget1;
}
void Widget::updateSectionWidth(int logicalIndex, int /* oldSize */, int newSize)
{
if(logicalIndex == 0)
{
tableWidget1->setColumnWidth(0, newSize);
// tableWidget1->setColumnWidth(1, newSize);
updateFrozenTableGeometry();
}
if(logicalIndex == 1)
{
//tableWidget1->setColumnWidth(0, newSize);
tableWidget1->setColumnWidth(1, newSize);
updateFrozenTableGeometry();
}
qDebug()<<"bb";
}
void Widget::updateSectionHeight(int logicalIndex, int /* oldSize */, int newSize)
{
tableWidget1->setRowHeight(logicalIndex, newSize);
updateFrozenTableGeometry();
qDebug()<<"cc";
}
void Widget::resizeEvent(QResizeEvent * event)
{
QTableWidget::resizeEvent(event);
updateFrozenTableGeometry();
qDebug()<<"aa";
}
//这个函数没有进入
QModelIndex Widget::moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers)
{
QModelIndex current = QTableWidget::moveCursor(cursorAction, modifiers);
if(cursorAction == MoveLeft && current.column() > 0
&& ui->tableWidget->visualRect(current).topLeft().x() < tableWidget1->columnWidth(0))
{
const int newValue = ui->tableWidget->horizontalScrollBar()->value() + ui->tableWidget->visualRect(current).topLeft().x()
- tableWidget1->columnWidth(0)- tableWidget1->columnWidth(1) ;
ui->tableWidget->horizontalScrollBar()->setValue(newValue);
// tableWidget1->horizontalScrollBar()->setValue(newValue);
}
qDebug()<<"dd";
return current;
}
//这个不知道为什么也没有进入
void Widget::scrollTo(const QModelIndex &index, ScrollHint hint)
{
if(index.column() > 0)
QTableWidget::scrollTo(index, hint);
qDebug()<<"ee";
}
void Widget::updateFrozenTableGeometry()
{
tableWidget1->setGeometry(ui->tableWidget->verticalHeader()->width() + ui->tableWidget->frameWidth(),
ui->tableWidget->frameWidth(), ui->tableWidget->columnWidth(0)+ui->tableWidget->columnWidth(1),
ui->tableWidget->viewport()->height()+ui->tableWidget->horizontalHeader()->height());
//qDebug()<<"aa";
}
这个是源程序#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QTableWidget>
namespace Ui {
class Widget;
}
class Widget : public QTableWidget
{
Q_OBJECT
public:
explicit Widget(QTableWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
// void init();
void updateFrozenTableGeometry();
QTableWidget * tableWidget1;
protected:
virtual void resizeEvent(QResizeEvent *event);
virtual QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers);
void scrollTo (const QModelIndex & index, ScrollHint hint = EnsureVisible);
private slots:
void updateSectionWidth(int logicalIndex, int oldSize, int newSize);
void updateSectionHeight(int logicalIndex, int oldSize, int newSize);
};
#endif // WIDGET_H
void Widget::updateFrozenTableGeometry()
{
tableWidget1->setGeometry(ui->tableWidget->verticalHeader()->width() + ui->tableWidget->frameWidth(),
ui->tableWidget->frameWidth(), ui->tableWidget->columnWidth(0)+ui->tableWidget->columnWidth(1),
ui->tableWidget->viewport()->height()+ui->tableWidget->horizontalHeader()->height());
//qDebug()<<"aa";
}
这是设置它大小的函数,应该是没什么问题,只不过不知道为什么不能初始化的时候就设置一样大小。
那个滑块滑动的时候不知道为什么不能同步。