Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 当光标处于';在QHeaderView段之间的边界下_Qt_Qtablewidget_Qcursor - Fatal编程技术网

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);
}