首页>>百科常识

QT编程,如何用代码实现 QTableWidget中滚动条的移动

今天宠物迷的小编给各位宠物饲养爱好者分享qt 滚动条设置的宠物知识,其中也会对QT编程,如何用代码实现 QTableWidget中滚动条的移动(qtabwidget添加滚动条)进行专业的解释,如果能碰巧解决你现在面临的宠物相关问题,别忘了关注本站哦,现在我们开始吧!

QT编程,如何用代码实现 QTableWidget中滚动条的移动

QTableWidget控件可以通过两个函数内部的滚动条控件
QScrollBar * verticalScrollBar() const 获得垂直滚动条控件
QScrollBar * horizontalScrollBar() const 获得水平滚动条控件
滚动条控件是QScrollBar类型;
通过滚动条控件的void setValue(int)函数,可以修改滚动条的滚动位置。
注意QScrollBar的滚动位置不要超过minimum()和maximum()的范围。

vc++如何为窗口添加滚动条?

QT编程,如何用代码实现 QTableWidget中滚动条的移动

第一步,在 CreateWindow 中添加 WS_VSCROLL 如下: hwnd = CreateWindow(szClsName, TEXT("Scroll Test."), WS_OVERLAPPEDWINDOW | WS_VSCROLL, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);第二步,添加 WM_VSCROLL 响应: case WM_VSCROLL:switch(LOWORD){wParam}{case SB_THUMBTRACK:nVPos = HIWORD(wParam);break;case SB_PAGEDOWN:nVPos += nyClient / nyChar;break;case SB_PAGEUP:nVPos -= nyClinet / nyChar;break;case SB_LINEDOWN:nVPos += 1;break;case SB_LINEUP:nVPos -= 1;break;}nVPos = max(0, min(nVPos, NUMLINES - nyClinet / nyChar));if(nVPos != GetScrollPos(hwnd, SB_VERT)) //滑块位置改变{SetScrollPos(hwnd, SB_VERT, nVPos, TRUE); //重设位置InvalidateRect(hwnd, NULL, TRUE); //重绘显示区}第三步:添加绘制响应 case WM_PAINT:hdc = BeginPaint(hwnd, &ps); for(i = 0; i < NUMLINES; i++) { y = nyChar * (i - nVPos); TextOut(hdc, 0, y, sysmetrics[i].szLabel, lstrlen(sysmetrics[i].szLabel)); TextOut(hdc, 22*nxCaps, y, sysmetrics[i].szDesc, lstrlen(sysmetrics[i].szDesc)); SetTextAlign(hdc, TA_RIGHT | TA_TOP); TextOut(hdc, 22*nxCaps + 40*nxChar, y, szBuf, wsprintf(szBuf, TEXT("%d"), GetSystemMetrics(sysmetrics[i].Index))); SetTextAlign(hdc, TA_LEFT | TA_TOP); }EndPaint(hwnd, &ps); 第四步,当窗口大小发生改变时重绘 case WM_SIZE:nyClient = HIWORD(lParam);SetScrollRange(hwnd, SB_VERT, 0, NUMLINES - nyClient / nyChar, FALSE);SetScrollPos(hwnd, SB_VERT, nVPos, TRUE);if((NUMLINES - nVPos)*nyChar nyClient){nVPos = NUMLINES - nyClient / nyChar;//PostMessage(hwnd, WM_VSCROLL, (nVPos << 16) & SB_THUMBTRACK, 0);}

如何动态为ListView添加和隐藏滚动条

首先你设置listView1.Scrollable = true没效果的原因是:listView1中的控件没有超出listView1的可视范围!你遇到的情况是listView1超出了Form1的可视范围!!! 所以你只需要Form1.AutoScroll=true;就可以解决了
直接不用lisview吧,直接使用ScrollView吧,至于listview的数据,你可以可以动态创建RelativeLayout去动态添加实现,只是费点事,不过想想listview与scrollview冲突问题,就觉得还是一个很好的解决方案

QT编程,如何用代码实现 QTableWidget中滚动条的移动

QTableWidget控件可以通过两个函数内部的滚动条控件
QScrollBar * verticalScrollBar() const 获得垂直滚动条控件
QScrollBar * horizontalScrollBar() const 获得水平滚动条控件
滚动条控件是QScrollBar类型;
通过滚动条控件的void setValue(int)函数,可以修改滚动条的滚动位置。
注意QScrollBar的滚动位置不要超过minimum()和maximum()的范围。

QT中如何给主窗口添加滚动条

构造函数里加上
eventTableSlider = new QScrollBar(Qt::Vertical, this);
eventTableSlider->setRange(0, 99);
eventTableSlider->setPageStep(20);
eventTableSlider->setSingleStep(1);
ui.tableWidget_4->setVerticalScrollBar(eventTableSlider);
注意要包含对应的头文件。

QT中的QtableWidget和QtableView使用有什么区别?

主要使用QTableView和QTableWidget中的三个函数实现

QTableView::verticalScrollBar()->setSliderPosition(); //设置当前滑动条的位置
QTableView::verticalScrollBar()->maximum(); //滑动条能移动的最大位置
QTableView::verticalScrollBar()->value(); //获得当前滑动条的位置

QTableWidget是一个表示二维离散数组的表格。它在给定维度里显示当前用户滚动的单元格。当用户在一个空的单元格中输入一些文本时,QTableWidget自动创建一个QTableWidgetItem对象保存输入的文本。

Qt 4推出了一组新的item view类,它们使用model/view结构来管理数据与表示层的关系。这种结构带来的
功能上的分离给了开发人员更大的弹性来定制数据项的表示,它也提供一个标准的model接口,使得更多的
数据源可以被这些item view使用。这里对model/view的结构进行了描述,结构中的每个组件都进行了解释,
给出了一些例子说明了提供的这些类如何使用。

Model/View 结构

Model-View-Controller(MVC), 是从Smalltalk发展而来的一种设计模式,常被用于构建用户界面。经典设计模式的著作中有这样的描述:

MVC 由三种对象组成。Model是应用程序对象,View是它的屏幕表示,Controller定义了用户界面如何对用户输入进行响应。在MVC之前,用户界面设计倾向于三者揉合在一起,MVC对它们进行了解耦,提高了灵活性与重用性。

假如把 view与controller结合在一起,结果就是model/view结构。这个结构依然是把数据存储与数据表示进行了分离,它与MVC都基于同样的思想,但它更简单一些。这种分离使得在几个不同的view上显示同一个数据成为可能,也可以重新实现新的view,而不必改变底层的数据结构。为了更灵活的对用户输入进行处理,引入了delegate这个概念。它的好处是,数据项的渲染与编程可以进行定制。

如上图所示,model与数据源通讯,并提供接口给结构中的别的组件使用。通讯的性质依赖于数据源的种类
与model实现的方式。view从model获取model indexes,后者是数据项的引用。通过把model indexes提供给model,view可以从数据源中获取数据。

在标准的 views中,delegate会对数据项进行渲染,当某个数据项被选中时,delegate通过model indexes与model直接进行交流。总的来说,model/view 相关类可以被分成上面所提到的三组:models,views,delegates。这些组件通过抽象类来定义,它们提供了共同的接口,在某些情况下,还提供了缺省的实现。抽象类意味着需要子类化以提供完整的其他组件希望的功能。这也允许实现定制的组件。models,views,delegates之间通过信号,槽机制来进行通讯:

从model发出的信号通知view数据源中的数据发生了改变。
从view发出的信号提供了有关被显示的数据项与用户交互的信息。
从delegate发生的信号被用于在编辑时通知model和view关于当前编辑器的状态信息。

Models

所有的item models都基于QAbstractItemModel类,这个类定义了用于views和delegates访问数据的接口。
数据本身不必存储在model,数据可被置于一个数据结构或另外的类,文件,数据库,或别的程序组件中。
关于model的基本概念在Model Classes部分中描述。
QAbstractItemModel提供给数据一个接口,它非常灵活,基本满足views的需要,无论数据用以下任何样的形式
表现,如tables,lists,trees。然而,当你重新实现一个model时,如果它基于table或list形式的数据结构,最好从QAbstractListModel,QAbstractTableModel开始做起,因为它们提供了适当的常规功能的缺省实现。这些类可以被子类化以支持特殊的定制需求。子类化model的过程在Create New Model部分讨论
QT提供了一些现成的models用于处理数据项:
QStringListModel 用于存储简单的QString列表。
QStandardItemModel 管理复杂的树型结构数据项,每项都可以包含任意数据。
QDirModel 提供本地文件系统中的文件与目录信息。
QSqlQueryModel, QSqlTableModel,QSqlRelationTableModel用来访问数据库。
假如这些标准Model不满足你的需要,你应该子类化QAbstractItemModel,QAbstractListModel或是
QAbstractTableModel来定制。

Views

不同的view都完整实现了各自的功能:QListView把数据显示为一个列表,QTableView把Model 中的数据以table的形式表现,QTreeView 用具有层次结构的列表来显示model中的数据。这些类都基于QAbstractItemView抽象基类,尽管这些类都是现成的,完整的进行了实现,但它们都可以用于子类化以便满足定制需求。

Delegates
QAbstractItemDelegate 是model/view架构中的用于delegate的抽象基类。缺省的delegate实现在QItemDelegate类中提供。它可以用于Qt标准views的缺省 delegate.

排序

在model/view架构中,有两种方法进行排序,选择哪种方法依赖于你的底层Model。
假如你的model是可排序的,也就是它重新实现了QAbstractItemModel::sort()函数,QTableView与QTreeView都提供了API,允许你以编程的方式对Model数据进行排序。另外,你也可以进行交互方式下的排序(例如,允许用户通过点击view表头的方式对数据进行排序),可以这样做:把QHeaderView::sectionClicked()信号与QTableView::sortByColum()槽或QTreeView::sortByColumn()槽进行联结就好了。
另一种方法是,假如你的model没有提供需要的接口或是你想用list view表示数据,可以用一个代理
model在用view表示数据之前对你的model数据结构进行转换。

便利类

许多便利类都源于标准的view类,它们方便了那些使用Qt中基于项的view与table类,它们不应该被子类化,
它们只是为Qt 3的等价类提供一个熟悉的接口。这些类有QListWidget,QTreeWidget,QTableWidget,它们提供了如Qt 3中的QListBox, QlistView,QTable相似的行为。这些类比View类缺少灵活性,不能用于任意的models,推介使用model/view的方法处理数据。

QT滚动条的问题?

第一个问题:
如果你的滚动条以及其他的窗口都继承自同一个父类,你可以使用
void QWidget::raise () [slot]
将窗体置于最顶层。即在每次加入了新的窗体之后,做下面的操作:
m_scrollBar->raise();
m_hscrollBar->raise();

第二个问题:
我不知道你的意思是不是在每次加入新的窗体之后,都让滚动条自动跳到最底处。
首先你需要知道你新添加窗体之后,你所有的子窗口的总高度totalHeight。
然后重新设置垂直滚动条的range,再设置滚动条的值;与下面的操作类似
//设置滚动条范围
m_scrollBar->setMinimum(0);
m_scrollBar->setMaximum(totalHeight);
//设置滚动条的值
m_scrollBar->setValue(totalHeight);

至于行不行,我还没试过,你可以尝试下下。-_-!

为什么QScrollArea的滚动条没有出现

第一步:建立一个scrollArea,放进一个widget。
方法1:手动写代码建立滚动区域:
QLabel *imageLabel = new QLabel; //任意一个继承于QWidget的控件都可以QImage image("happyguy.png");
imageLabel->setPixmap(QPixmap::fromImage(image));
scrollArea = new QScrollArea; //申请一个滚动区域,它本身是继承于QFramescrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setWidget(imageLabel); //必须做的一步,将这个子窗口imageLabel装进scrollArea
方法2:更简单,直接在qt designer中直接拖一个QScrollArea:scrollArea进来,这个时候QScrollArea中自动被填入了一个QWidget:scrollAreaWidgetContents_3。

第二步:指定scrollArea滚动策略:
QAbstractScrollArea::horizontalScrollBarPolicy竖向滚动条延伸策略
QAbstractScrollArea::verticalScrollBarPolicy横向滚动条延伸策略

Qt::ScrollBarAsNeeded 0 控件自动判断,需要时候显示滚动条
Qt::ScrollBarAlwaysOff 1 滚动条一直关闭
Qt::ScrollBarAlwaysOn 2 滚动条一直开着
当然直接在设计师scrollArea的属性里修改也可以。

第三步:Size Hints and Layouts
当用scroll area 显示自定义widget的时候,确定这个窗口合适的大小很重要。如果是一个标准的QWidget,你有必要通过QWidget::setMinimumSize() 设置一下这个控件的最小位置。这样当scrollArea只要小于这个值,scrollArea就能自动显示出滚动条了。
通过designer设置属性值如下图1:
效果如下图2:
对窗口用layout的时候,也要注意一下策略,它会影响你的scroolArea的滚动条出现的位置。


4
第四个:widgetResizable : bool
scrollArea这个属性是用来自动更改widget大小,尽量避免滚动条的出现,或者充分利用空间。

jquery怎么实现平滑滚动效果 就是随着滚动条而滚动

var timer; $(function(){ //滚动条滚动触发 $(window).scroll(function(){ clearInterval(timer); var topScroll=getScroll(); var topDiv="100px"; var top=topScroll+parseInt(topDiv); timer=setInterval(function(){ //动画移动 $(".test").animate({"top":top},500); },500) }) }) function getScroll(){ var bodyTop = 0; if (typeof window.pageYOffset != 'undefined') { bodyTop = window.pageYOffset; } else if (typeof document***mpatMode != 'undefined' && document***mpatMode != 'BackCompat') { bodyTop = document.documentElement.scrollTop; } else if (typeof document.body != 'undefined') { bodyTop = document.body.scrollTop; } return bodyTop }

很多网站滚动条向下的时候加载图片是怎么做到的?

那个功能叫:延时加载。
网上有很多JS可以利用和实现的,你可以找一下

本文由宠物迷 百科常识栏目发布,非常欢迎各位朋友分享到个人朋友圈,但转载请说明文章出处“QT编程,如何用代码实现 QTableWidget中滚动条的移动

标签:宠物爱好