Qt 当光标处于';在QHeaderView段之间的边界下
有Qt 当光标处于';在QHeaderView段之间的边界下,qt,qtablewidget,qcursor,Qt,Qtablewidget,Qcursor,有N列从左侧手动调整宽度。仅当手动调整大小的列正在调整大小时,其他列宽才会调整大小。我需要防止光标图标改变时,光标是在没有手动调整大小部分的边界 我试着做什么。但这不是很好的工作 #包括“mainwindow.h” #包括“ui_main window.h” 常数int N=2; //============================================================================== int nWidth(常量QTableWidget*
N
列从左侧手动调整宽度。仅当手动调整大小的列正在调整大小时,其他列宽才会调整大小。我需要防止光标图标改变时,光标是在没有手动调整大小部分的边界
我试着做什么。但这不是很好的工作
#包括“mainwindow.h”
#包括“ui_main window.h”
常数int N=2;
//==============================================================================
int nWidth(常量QTableWidget*表)
{
int-ret=0;
如果(表->垂直标题()->isVisible())
{
ret+=表格->垂直标题()->宽度();
}
对于(int i=0;i列宽(i);
}
返回ret;
}
bool-isnncolumns(const-QTableWidget*表)
{
QPoint cursorPos=table->mapFromGlobal(QCursor::pos());
返回cursorPos.x()setOverrideCursor(QCursor(Qt::ArrowCursor));
返回;
}
qApp->setOverrideCursor(QCursor(Qt::SplitHCursor));
}
}
};
//==============================================================================
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
ui->tableWidget->setHorizontalHeader(新建MyHorizontalHeader(此));
}
MainWindow::~MainWindow()
{
删除用户界面;
}
您应该使用QEvent::Enter
和QEvent::Leave
以获得更好的结果
使用下一个事件筛选器:
在标题中:
protected:
bool eventFilter(QObject *obj, QEvent *event);
在构造函数中:
qApp->installEventFilter(this);
事件筛选器:
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == ui->tableWidget && event->type() == QEvent::Enter)
{
qApp->setOverrideCursor(QCursor(Qt::ArrowCursor));
//or
qApp->setOverrideCursor(ui->tableWidget->cursor());
qDebug() << "added";
}
if (obj == ui->tableWidget && event->type() == QEvent::Leave)
{
qApp->restoreOverrideCursor();
}
return QObject::eventFilter(obj, event);
}
bool主窗口::事件过滤器(QObject*obj,QEvent*event)
{
if(obj==ui->tableWidget&&event->type()==QEvent::Enter)
{
qApp->setOverrideCursor(QCursor(Qt::ArrowCursor));
//或
qApp->setOverrideCursor(ui->tableWidget->cursor());
qDebug()tableWidget&&event->type()==QEvent::Leave)
{
qApp->restoreOverrideCursor();
}
返回QObject::eventFilter(对象,事件);
}
horizontalHeader()->setSectionResizeMode(i,QHeaderView::Fixed);请参阅:我更新了我的答案。FocusIn
和FocusOut
不太合适,请检查我的更新。
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == ui->tableWidget && event->type() == QEvent::Enter)
{
qApp->setOverrideCursor(QCursor(Qt::ArrowCursor));
//or
qApp->setOverrideCursor(ui->tableWidget->cursor());
qDebug() << "added";
}
if (obj == ui->tableWidget && event->type() == QEvent::Leave)
{
qApp->restoreOverrideCursor();
}
return QObject::eventFilter(obj, event);
}