Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. How to change cursor shape at column boundaries of QTableView Qt 5.13.0
QtWS25 Last Chance

How to change cursor shape at column boundaries of QTableView Qt 5.13.0

Scheduled Pinned Locked Moved Unsolved General and Desktop
23 Posts 3 Posters 2.5k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    ad5xj
    wrote on last edited by
    #10

    UPDATE
    As a test I created a ridiculously simple test program that consists of a QMainWindow and a QTableWidget with 10 rows and 6 columns. Upon running this meaningless application, the cursor action works as expected channging on the column boundary when the column is crossed.

    This indicates to me that something programmatically is preventing the display of the cursor change. I have no clue what that may be.

    Is there that much difference between the QTableView and QTableWidget? Or does this mean there is so sort of bug in QTableView?

    Ken AD5XJ

    1 Reply Last reply
    0
    • Christian EhrlicherC Online
      Christian EhrlicherC Online
      Christian Ehrlicher
      Lifetime Qt Champion
      wrote on last edited by
      #11

      @ad5xj said in How to change cursor shape at column boundaries of QTableView Qt 5.13.0:

      Is there that much difference between the QTableView and QTableWidget?

      No, there is no difference wrt to the header. QTableWidget is a QTaleView + convenience model.

      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
      Visit the Qt Academy at https://academy.qt.io/catalog

      1 Reply Last reply
      1
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #12

        @ad5xj said in How to change cursor shape at column boundaries of QTableView Qt 5.13.0:

        SGaist I am not understanding the question. Qt v5.13.0 binary installer was downloaded as the online installer from qt.io and installed on my Linux Mint 19.2 system. Not compiled. Is that what you are having reference to?

        All Linux distributions that provide Qt packages also provide the corresponding development packages so that people can develop their libraries/applications using the Qt version that they have currently installed on their machine. Some distribution may apply patches to Qt or you could be using a custom style that behaves differently than what is provided by the pre-built package hence it's always a good idea to test an issue against the system provided Qt to determine if it's something that affects also your distribution or only the pre-built package.

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        0
        • A Offline
          A Offline
          ad5xj
          wrote on last edited by
          #13

          SGaist such is not the case.

          This is the package supplied by the online installer for Qt binaries on Debian systems such as Linux Mint. No source for Qt libraries were used. Only the supplied pre-built binaries from the online installer. It is a very plain vanilla installation and in general works well other than is anomoly.

          The QTableView is used as is with no modification to style or use of style sheets. The QTableView object is use with all defaults and only :
          setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
          setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
          was changed.

          I do agree it is a variant I have not seen before and did not expect.

          Ken AD5XJ

          SGaistS 1 Reply Last reply
          0
          • A Offline
            A Offline
            ad5xj
            wrote on last edited by
            #14

            To check whether I had introduced the problem in my code I brought up an older application that had been working. After compiling and running it, I find it too has the problem.

            So I am attempting to remove Qt and reinstall to see if it is a problem with my Qt install.

            Ken AD5XJ

            1 Reply Last reply
            0
            • A ad5xj

              SGaist such is not the case.

              This is the package supplied by the online installer for Qt binaries on Debian systems such as Linux Mint. No source for Qt libraries were used. Only the supplied pre-built binaries from the online installer. It is a very plain vanilla installation and in general works well other than is anomoly.

              The QTableView is used as is with no modification to style or use of style sheets. The QTableView object is use with all defaults and only :
              setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
              setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
              was changed.

              I do agree it is a variant I have not seen before and did not expect.

              SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by
              #15

              @ad5xj said in How to change cursor shape at column boundaries of QTableView Qt 5.13.0:

              SGaist such is not the case.

              This is the package supplied by the online installer for Qt binaries on Debian systems such as Linux Mint. No source for Qt libraries were used. Only the supplied pre-built binaries from the online installer. It is a very plain vanilla installation and in general works well other than is anomoly.

              The QTableView is used as is with no modification to style or use of style sheets. The QTableView object is use with all defaults and only :
              setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
              setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
              was changed.

              I do agree it is a variant I have not seen before and did not expect.

              There's a misunderstanding here. I do understand that you are using the pre-built package with Qt 5.13, no problem with that.

              What I am asking you do to is to re-build your application with Mint's provided Qt version and see if it behaves the same or not. If the behaviour is the same, then you likely have something fishy going on with your code or you may have found a bug. If the behaviour is different, then it might be something new that happened between the version provided by Mint and Qt 5.13.

              You can also test earlier versions of Qt to see when the behaviour changed.

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              1 Reply Last reply
              0
              • A Offline
                A Offline
                ad5xj
                wrote on last edited by
                #16

                OK, I think I have found at least a workaround.

                I created a trivial project with only a QMainWindow and a QTableWidget. This meaningless project compiled and worked as expected. So I began to add in lines to my trivial project from my other project as they occured to find the offending lines if code.

                My mainwindow constructor first line uses a QApplication::setOverrideCursor() to change the application cursor to a wait cursor, and conversely the last line contains a similar line that changes it back to an arrow cursor.

                Therein lies the problem. When those two lines were eliminated, the application works as expected. The cursor movement over column size handles does produce the expected cursor change.

                Now the question becomes whether this is a design phenomenon or a bug. That will have to be a question for Qt designers.

                For now, problem averted. I can move on with my project.

                Thanks to all who contributed.

                Ken AD5XJ

                1 Reply Last reply
                0
                • Christian EhrlicherC Online
                  Christian EhrlicherC Online
                  Christian Ehrlicher
                  Lifetime Qt Champion
                  wrote on last edited by
                  #17

                  @ad5xj said in How to change cursor shape at column boundaries of QTableView Qt 5.13.0:

                  Now the question becomes whether this is a design phenomenon or a bug.

                  Can you please provide the source code from your testcase so we can take a look on it?

                  Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                  Visit the Qt Academy at https://academy.qt.io/catalog

                  1 Reply Last reply
                  1
                  • A Offline
                    A Offline
                    ad5xj
                    wrote on last edited by ad5xj
                    #18

                    OK, I have never done this before but here goes. This trivial application does nothing but did provide the clues to the solution.

                    In the constructor of the QMainWindow I had used QApplication::setOverrideCursor(QCursor) to change to a wait cursor at the start and again at the end to change back to an arrow cursor. It was not until those two line were eliminated that the project began to function as expected.

                    Update: My user privileges are not high enough to upload files so I will include the code here:
                    mainwindow.h

                    #ifndef MAINWINDOW_H
                    #define MAINWINDOW_H
                    #include <QMainWindow>
                    
                    #include "ui_mainwindow.h"
                    
                    namespace Ui {
                    class MainWindow;
                    }
                    
                    class MainWindow : public QMainWindow
                    {
                        Q_OBJECT
                        
                    public:
                        explicit MainWindow(QWidget *parent = nullptr);
                        ~MainWindow();
                        
                    protected:
                        void changeEvent(QEvent *e);
                        
                    private:
                        class MWPriv;
                        MWPriv *mwd;
                    
                        Ui::MainWindow *ui;
                    };
                    
                    #endif // MAINWINDOW_H
                    

                    mainwidow.cpp

                    #include <QSplitter>
                    #include <QSqlQueryModel>
                    #include <QSqlRelationalTableModel>
                    #include <QSqlQuery>
                    
                    #include "mainwindow.h"
                    
                    // -----------------------------------------------
                    // LOCAL PRIVATE VAR DEFINITIONS
                    //    pointed to by the *d-ptr definition in
                    //    the header file
                    // -----------------------------------------------
                    class MainWindow::MWPriv
                    {
                    public:
                        bool    useUTC;
                        bool    dbg2file;
                        bool    showstats;
                        bool    tblNeedsReload;
                        bool    showSrchFiltered;
                    
                        bool    font_bold;
                        bool    font_italic;
                        bool    font_underline;
                    
                        bool    daily_mode;
                        bool    field_day;
                        bool    contest_mode;
                    
                        bool    useQRZ;
                        bool    useCallook;
                    
                        bool    useAltRowColor;
                        bool    contEditVisible;
                        bool    fdEditVisible;
                        bool    formloaded;
                    
                        int hdrfontsize;
                        int timefontsize;
                        int dtlfontsize;
                        int no_of_qsos;
                    
                        int color_R;
                        int color_G;
                        int color_B;
                        int color_A;
                    
                        int uix;
                        int uiy;
                        int uiw;
                        int uih;
                    
                        int rowcnt;
                        int currentLog; // This is to be able to manage multiple logs without showing them all at the same time.
                        int modifyingQSO;      // When modifying, the QSO is saved here.
                        int selectedYear;
                    
                        QByteArray geo;
                        QByteArray uiState;
                    
                        // Vals from settings for Logbook
                        QString    dtlfontfamily;
                        QString    hdrfontfamily;
                        QString    timefontfamily;
                    
                        QString    hdrs;
                        QString    colwidths;
                    
                        QString    mode_text;
                        QString    dbgfile;
                    
                        QString    sofwareVersion;
                        QString    adif_file;
                        QString    xml_file;
                        QString    xmlrpchost;
                        QString    xmlrpcport;
                    
                        QString    DBConnName;
                        QString    DBPath;
                        QString    DBName;
                        QString    DBHostName;
                        QString    DBDriver;
                        QString    DBUser;
                        QString    DBPassWd;
                        // operating station variables from settings
                        QString    callsign;
                        QString    firstname;
                        QString    city;
                        QString    ststate;
                        QString    grid;
                        QString    country;
                        QString    cont;
                        //
                    
                        QString    title;
                        QString    fltr;
                    
                        QFont      hdrfont;
                        QFont      dtlfont;
                    
                        QSqlQuery      qry;
                    
                        QAction        *actionShowContactEditor;
                        QAction        *actionShowFDEdit;
                        QAction        *actionShowNone;
                        QAction        *actionShowFDStats;
                    
                        QActionGroup   *chkGroup;
                        QActionGroup   *radGroup;
                    
                        QSplitter      *mainSplitter;
                    
                        QSqlQueryModel *model;
                        QSqlRelationalTableModel *tmodel;
                    };
                    
                    MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
                    {
                        //====> This breaks it QApplication::setOverrideCursor(Qt::WaitCursor);
                        mwd = new MWPriv;
                        mwd->tblNeedsReload = true;
                        mwd->formloaded = false;
                        mwd->useQRZ = false;
                        mwd->useCallook = false;
                        mwd->useUTC = false;
                    
                        ui = new Ui::MainWindow;
                        ui->setupUi(this);
                    
                        ui->retranslateUi(this);
                        //====> This breaks it QApplication::setOverrideCursor(Qt::ArrowCursor);
                    }
                    
                    MainWindow::~MainWindow()
                    {
                        delete ui;
                    }
                    
                    void MainWindow::changeEvent(QEvent *e)
                    {
                        QMainWindow::changeEvent(e);
                        switch (e->type()) {
                        case QEvent::LanguageChange:
                            ui->retranslateUi(this);
                            break;
                        default:
                            break;
                        }
                    }
                    

                    mainwindow.ui

                    <?xml version="1.0" encoding="UTF-8"?>
                    <ui version="4.0">
                     <class>MainWindow</class>
                     <widget class="QMainWindow" name="MainWindow">
                      <property name="geometry">
                       <rect>
                        <x>0</x>
                        <y>0</y>
                        <width>400</width>
                        <height>300</height>
                       </rect>
                      </property>
                      <property name="windowTitle">
                       <string>MainWindow</string>
                      </property>
                      <widget class="QWidget" name="centralWidget">
                       <widget class="QTableWidget" name="tableWidget">
                        <property name="geometry">
                         <rect>
                          <x>10</x>
                          <y>10</y>
                          <width>256</width>
                          <height>192</height>
                         </rect>
                        </property>
                        <property name="rowCount">
                         <number>10</number>
                        </property>
                        <property name="columnCount">
                         <number>6</number>
                        </property>
                        <row/>
                        <row/>
                        <row/>
                        <row/>
                        <row/>
                        <row/>
                        <row/>
                        <row/>
                        <row/>
                        <row/>
                        <column/>
                        <column/>
                        <column/>
                        <column/>
                        <column/>
                        <column/>
                       </widget>
                      </widget>
                      <widget class="QMenuBar" name="menuBar">
                       <property name="geometry">
                        <rect>
                         <x>0</x>
                         <y>0</y>
                         <width>400</width>
                         <height>24</height>
                        </rect>
                       </property>
                      </widget>
                      <widget class="QToolBar" name="mainToolBar">
                       <attribute name="toolBarArea">
                        <enum>TopToolBarArea</enum>
                       </attribute>
                       <attribute name="toolBarBreak">
                        <bool>false</bool>
                       </attribute>
                      </widget>
                      <widget class="QStatusBar" name="statusBar"/>
                     </widget>
                     <layoutdefault spacing="6" margin="11"/>
                     <resources/>
                     <connections/>
                    </ui>
                    

                    Hope this helps.

                    Ken AD5XJ

                    1 Reply Last reply
                    1
                    • Christian EhrlicherC Online
                      Christian EhrlicherC Online
                      Christian Ehrlicher
                      Lifetime Qt Champion
                      wrote on last edited by
                      #19

                      @ad5xj said in How to change cursor shape at column boundaries of QTableView Qt 5.13.0:

                      QApplication::setOverrideCursor(QCursor)

                      I don't see where you're calling it - can you please modify it so we can see the error? Thx.

                      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                      Visit the Qt Academy at https://academy.qt.io/catalog

                      1 Reply Last reply
                      0
                      • A Offline
                        A Offline
                        ad5xj
                        wrote on last edited by
                        #20

                        Updated for you Christian

                        Ken AD5XJ

                        1 Reply Last reply
                        0
                        • Christian EhrlicherC Online
                          Christian EhrlicherC Online
                          Christian Ehrlicher
                          Lifetime Qt Champion
                          wrote on last edited by
                          #21

                          Ok, now I see what you're doing wrong - you're setting a global override cursor so no widget will be able to change the cursor. You're looking for QGuiApplication::restoreOverrideCursor() as described in the documentation

                          Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                          Visit the Qt Academy at https://academy.qt.io/catalog

                          1 Reply Last reply
                          1
                          • A Offline
                            A Offline
                            ad5xj
                            wrote on last edited by
                            #22

                            OK, that worked.

                            It is not obvious or even clear from the docs there is that much difference or even when it is appropriate to use one or the other.

                            Ken AD5XJ

                            1 Reply Last reply
                            0
                            • Christian EhrlicherC Online
                              Christian EhrlicherC Online
                              Christian Ehrlicher
                              Lifetime Qt Champion
                              wrote on last edited by Christian Ehrlicher
                              #23

                              I would say this is clear enough:

                              "Application override cursors are intended for showing the user that the application is in a special state, for example during an operation that might take some time.

                              This cursor will be displayed in all the application's widgets until restoreOverrideCursor() or another setOverrideCursor() is called."

                              /Edit: please makr the thread as solved, thx :)

                              Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                              Visit the Qt Academy at https://academy.qt.io/catalog

                              1 Reply Last reply
                              2

                              • Login

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • Users
                              • Groups
                              • Search
                              • Get Qt Extensions
                              • Unsolved