QT中如何删除QTableView自动生成的数字序号列?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT中如何删除QTableView自动生成的数字序号列?相关的知识,希望对你有一定的参考价值。

还有就是如何删除表格的边框?改变表格的颜色之类的属性?

查看QT帮助文档吧 数字序列可以隐藏的 边框颜色都是可以修改的 参考技术A qtableview::sortbycolumn(int
column,
qt::sortorder
order);
已经包含了数字排序和字母排序。

如何在 Qt 的 QTableview 中找到我的按钮的行号

【中文标题】如何在 Qt 的 QTableview 中找到我的按钮的行号【英文标题】:How to locate the row number of my button in QTableview in Qt 【发布时间】:2018-04-27 20:23:25 【问题描述】:

我有一个函数可以将 QStyleOptionButton 添加到 QTableview 中的某个列, 我希望能够在单击时获取每个按钮的行号并将值存储在变量中。

这是我的代码 delegate.cpp

MyDelegate::MyDelegate(QObject *parent)
     : QItemDelegate(parent)
 

 


 void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
 
     QStyleOptionButton button;
     QRect r = option.rect;//getting the rect of the cell
     int x,y,w,h;
     x = r.left() + r.width() - 30;//the X coordinate
     y = r.top();//the Y coordinate
     w = 30;//button width
     h = 30;//button height
     button.rect = QRect(x,y,w,h);
     button.text = "View log";
     button.state = QStyle::State_Enabled;

     QApplication::style()->drawControl( QStyle::CE_PushButton, &button, painter);
 

 bool MyDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
 
     if( event->type() == QEvent::MouseButtonRelease )
     
         QMouseEvent * e = (QMouseEvent *)event;
         int clickX = e->x();
         int clickY = e->y();

         QRect r = option.rect;//getting the rect of the cell
         int x,y,w,h;
         x = r.left() + r.width() - 30;//the X coordinate
         y = r.top();//the Y coordinate
         w = 30;//button width
         h = 30;//button height

         if( clickX > x && clickX < x + w )
             if( clickY > y && clickY < y + h )
             
                // int row=tableview->rowAt(pos.y());
                 // int column=tableview->columnAt(pos.x());

                 QDialog * d = new QDialog();
                 d->setGeometry(0,0,100,100);
                // QTextBrowser *txt = new QTextBrowser(row, column);
                 d->show();
             
     

     return true;
 

【问题讨论】:

【参考方案1】:

你必须使用 QModelIndex:

bool MyDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)

    Q_UNUSED(model)
    if( event->type() == QEvent::MouseButtonRelease )
    
        QMouseEvent * e = (QMouseEvent *)event;
        QPoint p = e->pos();

        QRect r = option.rect;//getting the rect of the cell
        QRect re(r.topRight() - QPoint(30, 0), QSize(30, 30));

        if(re.contains(p))
            int row = index.row(); // <---- row
            int column = index.column(); // <---- column

            QDialog * d = new QDialog();
            d->setGeometry(0,0,100,100);
            d->show();
         
    
    return true;

【讨论】:

以上是关于QT中如何删除QTableView自动生成的数字序号列?的主要内容,如果未能解决你的问题,请参考以下文章

QT中QTableView是怎么实现数字的排序

Qt 中 QTableView 中如何设置某一单元格文本的颜色值,希望能贴出代码。

如何使用计时器正确更新 QTableView?

Qt:QTableView如何添加一行?

如何根据内容调整 QTableView 的高度?

如何在 Qt5 中触发 QTableView 的重绘?