How can I prevent the cursor from converting to SplitHCursor when it is under the border between the sections of the QHeaderView

There are columns Nwith manual resizing widths on the left. The widths of other columns only change when resizing columns with manual resizing. I need to prevent the cursor icon from changing when the cursor is under section borders without manually resizing.

enter image description here

What I tried to do. But this is not very good.

table_header_border.zip

#include "mainwindow.h"
#include "ui_mainwindow.h"

const int N = 2;

//==============================================================================

int nWidth(const QTableWidget *table)
{
    int ret = 0;

    if (table->verticalHeader()->isVisible())
    {
        ret += table->verticalHeader()->width();
    }

    for (int i = 0; i < N; i++)
    {
        ret += table->columnWidth(i);
    }

    return ret;
}

bool isInNColumns(const QTableWidget *table)
{
    QPoint cursorPos = table->mapFromGlobal(QCursor::pos());
    return cursorPos.x() < nWidth(table) + 5;
}

//==============================================================================

class MyHorizontalHeader : public QHeaderView
{
public:
    MyHorizontalHeader(QWidget *parent=0) : QHeaderView(Qt::Horizontal, parent)
    {
        setMouseTracking(true);
    }
private slots:
    void mouseMoveEvent(QMouseEvent *event)
    {
        QHeaderView::mouseMoveEvent(event);
        if (cursor().shape() == Qt::SplitHCursor)
        {
            QTableWidget *table = dynamic_cast<QTableWidget *>(parent());
            if (table != NULL && !isInNColumns(table))
            {
                qApp->setOverrideCursor(QCursor(Qt::ArrowCursor));
                return;
            }
            qApp->setOverrideCursor(QCursor(Qt::SplitHCursor));
        }
    }
};

//==============================================================================

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->tableWidget->setHorizontalHeader(new MyHorizontalHeader(this));
}

MainWindow::~MainWindow()
{
    delete ui;
}
-1
source share
2 answers

horizontalHeader () → setSectionResizeMode (i, QHeaderView :: Fixed);

0
source

QEvent::Enter QEvent::Leave.

:

:

protected:
     bool eventFilter(QObject *obj, QEvent *event);

:

qApp->installEventFilter(this);

EventFilter:

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

All Articles