QT QTableView 翻页实现

QT QTableView 翻页实现,第1张

 主要使用QTableView( QTableWidget)中的三个函数:

QTableView::verticalScrollBar()->setSliderPosition();  //设置当前滑动条的位置

QTableView::verticalScrollBar()->maximum()             //滑动条能移动的最大位置

QTableView::verticalScrollBar()->value()                   //获得当前滑动条的位置

#include<QScrollBar>//滑动条

#include<QTableView>

int Widget::pageCount(QTableView *p)//QTableView 总页数

{

    if(p == NULL)  return -1

    int rowCount = p->model()->rowCount()

    int rowHeight = p->rowHeight(0)

    int tableViewHeight = p->height()

    int rowCountPerPage = tableViewHeight/rowHeight-1//每页显示行数

    int ret = rowCount/rowCountPerPage

    int tem = rowCount%rowCountPerPage

    if (tem != 0) ret++

    return ret

}

void Widget::pageTo(QTableView *p, int pageNO)//翻到指定页

{

    if(p == NULL)  return

    int maxPage = pageCount(p)

    if(pageNO >maxPage)  return

    int rowCount = p->model()->rowCount()

    int rowHeight = p->rowHeight(0)

    int tableViewHeight = p->height()

    int rowCountPerPage = tableViewHeight/rowHeight-1 //每页显示行数

    int canNotViewCount = rowCount-rowCountPerPage //看不见的行数

    if(canNotViewCount == 0) return

    int maxValue = p->verticalScrollBar()->maximum() // 当前SCROLLER最大显示值

    if(maxValue == 0) return

    int pageValue = (maxValue*rowCountPerPage)/canNotViewCount

    p->verticalScrollBar()->setSliderPosition(pageValue*(pageNO-1))

}

void Widget::pageUp(QTableView *p)//上翻

{

    if(p == NULL)  return

    int rowCount = p->model()->rowCount()

    int rowHeight = p->rowHeight(0)

    int tableViewHeight = p->height()

    int rowCountPerPage = tableViewHeight/rowHeight-1 //每页显示行数

    int canNotViewCount = rowCount-rowCountPerPage //看不见的行数

    if(canNotViewCount == 0) return

    int maxValue = p->verticalScrollBar()->maximum() // 当前SCROLLER最大显示值

    if(maxValue == 0) return

    int pageValue = (maxValue*rowCountPerPage)/canNotViewCount

    int nCurScroller = p->verticalScrollBar()->value() //获得当前scroller值

    if(nCurScroller>0)

        p->verticalScrollBar()->setSliderPosition(nCurScroller-pageValue)

    else

    {

      // if(isLoop == TRUE)

            p->verticalScrollBar()->setSliderPosition(maxValue)

    }

}

void Widget::pageDown(QTableView *p)//下翻

{

    if(p == NULL)  return

    int rowCount = p->model()->rowCount()

    int rowHeight = p->rowHeight(0)

    int tableViewHeight = p->height()

    int rowCountPerPage = tableViewHeight/rowHeight-1 //每页显示行数

    int canNotViewCount = rowCount-rowCountPerPage //看不见的行数

    if(canNotViewCount == 0)

        return

    int maxValue = p->verticalScrollBar()->maximum() // 当前SCROLLER最大显示值

    if(maxValue == 0)

        return

    int pageValue = (maxValue*rowCountPerPage)/canNotViewCount

    int nCurScroller = p->verticalScrollBar()->value() //获得当前scroller值

    if(nCurScroller

        p->verticalScrollBar()->setSliderPosition(nCurScroller+pageValue)

    else

    {

      //  if(isLoop == TRUE)

            p->verticalScrollBar()->setSliderPosition(0)

    }

}

void Widget::pageHome(QTableView *p)//首页

{

    if(p == NULL)  return

    int maxValue = p->verticalScrollBar()->maximum()// 当前SCROLLER最大显示值

    if(maxValue == 0)  return

    p->verticalScrollBar()->setSliderPosition(0)

}

void Widget::pageEnd(QTableView *p)//末页

{

    if(p == NULL)  return

    int maxValue = p->verticalScrollBar()->maximum()// 当前SCROLLER最大显示值

    if(maxValue == 0)  return

    p->verticalScrollBar()->setSliderPosition(maxValue)

}

EDD:

    在QT UI 界面实现设置相应的按钮点击实现就可。

QTableView和QTableWidget翻页功能实现-阿里云开发者社区

https://blog.csdn.net/liuguangzhou123/article/details/8109089

1 定义一个按钮

[cpp] view plain copy

QPushButton * pBtn = new QPushButton()

2 链接信号与曹

[cpp] view plain copy

connect(pBtn, SIGNAL(clicked()), this, SLOT(OnBtnClicked()))

3 按钮添加到单元格内

[cpp] view plain copy

table->setCellWidget(0,0,pBtn)//如果点击按钮出现崩溃现象,就添加QTableWidgetItem 到按钮的那个单元格

4 实现按钮的事件

[cpp] view plain copy

void myPic::OnBtnClicked(void)

{

QPushButton * senderObj=qobject_cast<QPushButton *>(sender())

if(senderObj == 0)

{

return

}

先创建一个QWidget,然后对这个QWidget设置布局,然后往布局里添加你的按钮,最后把这个QWidget设置到item上

嗯哈。

QWidget *container = new QWidget

container->addLayOut(xxxx)

container->addWidget(xxxWidget)

item->setItemWidget(containter)

//这个container完全可以用Desinger去做哈。高效快捷~

QTableWidget * tvDecoderItemArea = new QTableWidget(this)

tvDecoderItemArea->setObjectName("tvDecoderItemArea")

tvDecoderItemArea->setColumnCount(1)

tvDecoderItemArea->horizontalHeader()->setVisible(false)

tvDecoderItemArea->verticalHeader()->setVisible(false)

tvDecoderItemArea->horizontalHeader()->setStretchLastSection(true)

int index = tvDecoderItemArea->rowCount()

tvDecoderItemArea->setRowCount(index+1)

QPushButton* pItem = new QPushButton(tr("text_%1").arg(index+1))

tvDecoderItemArea->setCellWidget(index,0,pItem)

QListWidget::setItemWidget

QWidget是一个包裹,它占据Item的所有空间

可能是你的布局没有调整边距所致,在你这两个布局上设置setContentsMargins(0, 0, 0, 0)

似乎是使用QStyledItemDelegate这个来实现?求教如何使用?有没有例子?

使用QListWidget::setItemWidget时,如何对item进行布局?现在控件加进去了,但是都重叠在一起了。

这个QWidget在Item里面的位置如何调整?

,,这样那我把所有的东西,包括item的text、ICON都放入这个QWidget了?

listWidget->setResizeMode(QListView::Adjust)

listWidget->setGridSize(QSize(165,176))

listWidget->setIconSize(QSize(158,117))

listWidget->setViewMode(QListView::IconMode)

listWidget->setWordWrap(true)

listWidget->setAutoScroll(true)

mItem = new QListWidgetItem(listWidget)

mLayoutWidget = new QWidget(listWidget)

mVLayout = new QVBoxLayout(mLayoutWidget)

mHLayout = new QHBoxLayout()

QLabel *showPic = new QLabel(mLayoutWidget)

QPixmap pixMap(QString(":/b_1243700182001.jpg"))

showPic->setPixmap(pixMap)

mVLayout->addWidget(showPic)

QLabel *showName = new QLabel(text,mLayoutWidget)

mVLayout->addWidget(showName)

mDeleteBt = new QPushButton(mLayoutWidget)

mDetailBt = new QPushButton(mLayoutWidget)

mUploadBt = new QPushButton(mLayoutWidget)

mHLayout->addWidget(mDeleteBt)

mHLayout->addWidget(mDetailBt)

mHLayout->addWidget(mUploadBt)

mVLayout->addLayout(mHLayout)

mLayoutWidget->setLayout(mVLayout)

mLayoutWidget->show()


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11508370.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存