• 1658阅读
  • 4回复

[提问]qtablewidget表头添加控件 [复制链接]

上一主题 下一主题
离线梦幻风
 

只看楼主 倒序阅读 楼主  发表于: 2020-11-26

我在实验QtableWidget时想修改水平方向的表头,代码如下
继承QHeaderView  .h文件如下
#ifndef MYHEADERVIEW_H#define MYHEADERVIEW_H#include <QtGui>#include <QObject>#include <QHeaderView>#include <QStyleOptionButton>#include <QStyle>#include <QButtonGroup>#include <QCheckBox>#include <QMouseEvent>#include <QPainter>#include <QVector>#include <QDebug>#include <QPushButton>#include <QPainter>#include <QStyleOptionButton>#include <QStyle>class MyHeaderView : public QHeaderView{    Q_OBJECTpublic:    explicit MyHeaderView(int checkIndex, Qt::Orientation orientation,                 QWidget *parent=nullptr);    void movepoint(int with,int hight);     QPushButton *mbtn;};#endif // MYHEADERVIEW_H


继承QHeaderView   .cpp文件如下
#include "myheaderview.h"MyHeaderView::MyHeaderView(int checkIndex, Qt::Orientation orientation, QWidget * parent /*= 0*/)    : QHeaderView(orientation, parent){    mbtn=new QPushButton(this);    mbtn->setText(QString::number(checkIndex));    mbtn->setFixedSize(20,20);    mbtn->show();}void MyHeaderView::movepoint(int with, int hight){    mbtn->move(with,hight);}
调用方法如下
for (int i=0;i<3;i++)    {        MyHeaderView *myhead=new MyHeaderView(i,Qt::Horizontal,ui->tableWidget);        myhead->movepoint(50*(i+1),10);        myhead->update();        ui->tableWidget->setHorizontalHeader(myhead);        qDebug()<<myhead->mbtn->pos();    }
打印消息如下

QPoint(50,10)
QPoint(100,10)
QPoint(150,10)
效果图如下


问题:为什么我在QPoint(50,10)位置和QPoint(100,10)位置的按钮没有显示




离线梦幻风

只看该作者 1楼 发表于: 2020-11-26
头文件如下



#ifndef MYHEADERVIEW_H
#define MYHEADERVIEW_H
#include <QtGui>
#include <QObject>
#include <QHeaderView>
#include <QStyleOptionButton>
#include <QStyle>
#include <QButtonGroup>
#include <QCheckBox>
#include <QMouseEvent>
#include <QPainter>
#include <QVector>
#include <QDebug>
#include <QPushButton>
#include <QPainter>
#include <QStyleOptionButton>
#include <QStyle>


class MyHeaderView : public QHeaderView
{
    Q_OBJECT
public:
    explicit MyHeaderView(int checkIndex, Qt::Orientation orientation,
                 QWidget *parent=nullptr);

    void movepoint(int with,int hight);
     QPushButton *mbtn;
private:

};

#endif // MYHEADERVIEW_H
离线梦幻风

只看该作者 2楼 发表于: 2020-11-26
.cpp文件如下
#include "myheaderview.h"
MyHeaderView::MyHeaderView(int checkIndex, Qt::Orientation orientation, QWidget * parent /*= 0*/)
    : QHeaderView(orientation, parent)
{
    mbtn=new QPushButton(this);
    mbtn->setText(QString::number(checkIndex));
    mbtn->setFixedSize(20,20);
    mbtn->show();
}

void MyHeaderView::movepoint(int with, int hight)
{
    mbtn->move(with,hight);
}

离线梦幻风

只看该作者 3楼 发表于: 2020-11-26
调用方法如下
for (int i=0;i<3;i++)
    {
        MyHeaderView *myhead=new MyHeaderView(i,Qt::Horizontal,ui->tableWidget);
        myhead->movepoint(50*(i+1),10);
        myhead->update();
        ui->tableWidget->setHorizontalHeader(myhead);
        qDebug()<<myhead->mbtn->pos();
    }
离线zy1233

只看该作者 4楼 发表于: 2020-11-26
一个tableWidget只能设置一个he'aderView,你的HeaderView应该根据headerItem的数目new 多少个button
1条评分金钱+1
20091001753 金钱 +1 - 2020-11-27
快速回复
限100 字节
 
上一个 下一个