QTableView自动调整行高
Automatically adjust rows height in QTableView
我有一个派生自 QTableView (Qt 5.5.1) 的小部件,用于呈现来自 Postgres 服务器的数据。我想在用户使用鼠标调整列大小时自动调整行高以换行内容:
MyTableView::MyTableView(QWidget *parent) : QTableView(parent)
{
// ...
connect(
horizontalHeader(),
SIGNAL(sectionResized(int, int, int)),
this,
SLOT(resizeRowsToContents()));
}
这对小的 table 非常有效,但是大的 table 实际上不适合 table 使用,因为速度很慢。我需要一个像 afterSectionResized
这样的信号(当鼠标释放完成调整大小时)但是没有这样的事件。
当用户使用鼠标调整列大小时,如何避免多次 table 格式化?
定义一个新的class(MyHeaderView
)派生自QHeaderView和一个新的信号(resized()
)
当用户在调整部分大小时释放鼠标按钮时发出。
myheaderview.h
class MyHeaderView : public QHeaderView
{
Q_OBJECT
public:
explicit MyHeaderView(QWidget *parent = 0);
signals:
void resized();
private:
bool resizing;
void mouseReleaseEvent(QMouseEvent *);
private slots:
void setResizing();
};
myheaderview.cpp
MyHeaderView::MyHeaderView(QWidget *parent)
: QHeaderView(Qt::Horizontal, parent)
{
resizing = false;
connect(this,
SIGNAL(sectionResized(int, int, int)),
this,
SLOT(setResizing()));
}
void MyHeaderView::setResizing()
{
resizing = true;
}
void MyHeaderView::mouseReleaseEvent(QMouseEvent *)
{
if (resizing) {
resizing = false;
emit resized();
}
}
在 MyTableView
class 中用定义的 header 小部件替换标准水平 header:
MyTableView::MyTableView(QWidget *parent) : QTableView(parent)
{
myHeaderView = new MyHeaderView(this);
setHorizontalHeader(myHeaderView);
connect(horizontalHeader(),
SIGNAL(resized()),
this,
SLOT(resizeRowsToContents()));
}
我有一个派生自 QTableView (Qt 5.5.1) 的小部件,用于呈现来自 Postgres 服务器的数据。我想在用户使用鼠标调整列大小时自动调整行高以换行内容:
MyTableView::MyTableView(QWidget *parent) : QTableView(parent)
{
// ...
connect(
horizontalHeader(),
SIGNAL(sectionResized(int, int, int)),
this,
SLOT(resizeRowsToContents()));
}
这对小的 table 非常有效,但是大的 table 实际上不适合 table 使用,因为速度很慢。我需要一个像 afterSectionResized
这样的信号(当鼠标释放完成调整大小时)但是没有这样的事件。
当用户使用鼠标调整列大小时,如何避免多次 table 格式化?
定义一个新的class(MyHeaderView
)派生自QHeaderView和一个新的信号(resized()
)
当用户在调整部分大小时释放鼠标按钮时发出。
myheaderview.h
class MyHeaderView : public QHeaderView
{
Q_OBJECT
public:
explicit MyHeaderView(QWidget *parent = 0);
signals:
void resized();
private:
bool resizing;
void mouseReleaseEvent(QMouseEvent *);
private slots:
void setResizing();
};
myheaderview.cpp
MyHeaderView::MyHeaderView(QWidget *parent)
: QHeaderView(Qt::Horizontal, parent)
{
resizing = false;
connect(this,
SIGNAL(sectionResized(int, int, int)),
this,
SLOT(setResizing()));
}
void MyHeaderView::setResizing()
{
resizing = true;
}
void MyHeaderView::mouseReleaseEvent(QMouseEvent *)
{
if (resizing) {
resizing = false;
emit resized();
}
}
在 MyTableView
class 中用定义的 header 小部件替换标准水平 header:
MyTableView::MyTableView(QWidget *parent) : QTableView(parent)
{
myHeaderView = new MyHeaderView(this);
setHorizontalHeader(myHeaderView);
connect(horizontalHeader(),
SIGNAL(resized()),
this,
SLOT(resizeRowsToContents()));
}