我有一个从QTableView(Qt 5.5.1)派生的小部件,用于显示Postgres服务器的数据。当用户使用鼠标调整列的大小时,我想自动将行高调整为自动换行的内容:
MyTableView::MyTableView(QWidget *parent) : QTableView(parent)
{
// ...
connect(
horizontalHeader(),
SIGNAL(sectionResized(int, int, int)),
this,
SLOT(resizeRowsToContents()));
}
这适用于小桌子,但是由于大的减速,更大的桌子实际上不适合使用。我需要一个像afterSectionResized
这样的信号(当用鼠标释放完成调整大小时)但是没有这样的事件。
当用户使用鼠标调整列的大小时,如何避免多个表格格式化?
答案 0 :(得分:2)
定义从QHeaderView派生的新类(MyHeaderView
)和新信号(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
类中,使用已定义的标题窗口小部件替换标准水平标头:
MyTableView::MyTableView(QWidget *parent) : QTableView(parent)
{
myHeaderView = new MyHeaderView(this);
setHorizontalHeader(myHeaderView);
connect(horizontalHeader(),
SIGNAL(resized()),
this,
SLOT(resizeRowsToContents()));
}