转载 http://zhouzhenren163.blog.163.com/blog/static/6549928120140605729334/

效果如下图所示:

代码如下:

untitled.pro:

#-------------------------------------------------

#

# Project created by QtCreator 2015-12-03T15:32:15

#

#-------------------------------------------------

QT += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = untitled

TEMPLATE = app

SOURCES += main.cpp\

#mainwindow.cpp \

test.cpp \

mylistwidget.cpp \

mylistview.cpp \

mywinbox.cpp

HEADERS +=Enum.h \

test.h \

mylistwidget.h \

mylistview.h \

mywinbox.h\

#mainwindow.h \

FORMS += mainwindow.ui

Enum.h:

#ifndef ENUM_H

#define ENUM_H

enum MyEnum

{

GRAP = 2, //控件四周间隙,可更改;

WIDTH = 180+2*GRAP, //+2*GRAP不能更改,只能改前面的数字,如将400改为300或500,下同;

HEIGHT = 70+2*GRAP,

COUNT = 10

};

#endif // ENUM_H

mylistview.h:

#ifndef MYLISTVIEW_H

#define MYLISTVIEW_H

#include

#include

#include "MyWinBox.h"

class MyListView : public QListView

{

Q_OBJECT

public:

MyListView(QWidget *parent);

~MyListView();

public slots:

void ReSizeSlot(int row,int column);

public:

QList GetWinBoxList();

private:

QList m_WinBoxList;

};

#endif // MYLISTVIEW_Hmylistwidget.h:

#ifndef MYLISTWIDGET_H

#define MYLISTWIDGET_H

#include

#include

#include "MyListView.h"

class MyListWidget : public QWidget

{

Q_OBJECT

public:

MyListWidget(QWidget *parent);

~MyListWidget();

public:

MyListView* GetList();

private:

MyListView* m_ListView;

};

#endif // MYLISTWIDGET_Hmywinbox.h:

#ifndef MYWINBOX_H

#define MYWINBOX_H

#include

#include

class MyWinBox : public QWidget

{

Q_OBJECT

public:

MyWinBox(QWidget *parent);

~MyWinBox();

public:

QLineEdit*m_NameEdit;

};

#endif // MYWINBOX_H

test.h

#ifndef TEST_H

#define TEST_H

#include

#include "mylistwidget.h"

#include

class Test : public QWidget

{

Q_OBJECT

public:

Test(QWidget *parent = 0);

~Test();

//overwrite:

protected:

void resizeEvent(QResizeEvent * event);

signals:

void SendReSizeSignal(int,int);

private slots:

void DisplayListView(int);

private:

MyListWidget* m_ListWidget;

QScrollBar* m_VScrollBar ;

};

#endif // TEST_H

main.cpp:

//#include "mainwindow.h"

#include

#include "test.h"

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

// MainWindow w;

// w.show();

Test w;

w.show();

return a.exec();

}

mylistview.cpp

#include "mylistview.h"

#include "Enum.h"

MyListView::MyListView(QWidget *parent): QListView(parent)

{

for(int i=0;i

{

MyWinBox* box = new MyWinBox(this);

box->m_NameEdit->setText(QString("%0").arg(i+1));

box->move(0,i*(HEIGHT)+(i+1)*GRAP);

m_WinBoxList.append(box);

}

}

MyListView::~MyListView()

{

}

void MyListView::ReSizeSlot(int row,int column)

{

int x=0,y=0;

int n = 0;

for(int i=0;i

{

y = i * (HEIGHT+GRAP) + 2*GRAP;

for(int j=0;j

{

x = j * (WIDTH+GRAP) + 2*GRAP;

if(n>=COUNT)

break;

m_WinBoxList[n++]->move(x,y);

}

}

}

QList MyListView::GetWinBoxList()

{

return m_WinBoxList;

}mylistwidget.cpp

#include "MyListWidget.h"

#include

MyListWidget::MyListWidget(QWidget *parent): QWidget(parent)

{

m_ListView = new MyListView(this);

QGridLayout* layout = new QGridLayout(this);

layout->addWidget(m_ListView);

layout->setMargin(0);

layout->setSpacing(0);

setLayout(layout);

}

MyListWidget::~MyListWidget()

{

}

MyListView* MyListWidget::GetList()

{

return m_ListView;

}

mywinbox.cpp

#include "MyWinBox.h"

#include

#include

#include

#include

#include "Enum.h"

MyWinBox::MyWinBox(QWidget *parent) : QWidget(parent)

{

QLabel* name = new QLabel("name:",this);

m_NameEdit = new QLineEdit(this);

m_NameEdit->setFixedWidth(100);

QLabel* sex = new QLabel("sex:",this);

QCheckBox* check = new QCheckBox(this);

QGroupBox* groupBox = new QGroupBox(this);

QGridLayout* layout = new QGridLayout(this);

layout->addWidget(name,0,0);

layout->addWidget(m_NameEdit,0,1);

layout->addWidget(sex,1,0);

layout->addWidget(check,1,1);

groupBox->setLayout(layout);

groupBox->setAlignment(Qt::AlignCenter);

this->setFixedSize(WIDTH,2*(HEIGHT+GRAP));

QString groupBoxStyle = "QGroupBox{background: qradialgradient(cx:0, cy:0, radius: 1,fx:0.5, fy:0.5, stop:0 white, stop:1 rgba(0,0,0, 50%));border-radius: 3px}";

groupBox->setStyleSheet(groupBoxStyle);

}

MyWinBox::~MyWinBox()

{

}

test.cpp

#include "test.h"

#include

#include "Enum.h"

/*

Test::Test(QWidget *parent) : QWidget(parent)

{

m_ListWidget = new MyListWidget(this);

m_VScrollBar = new QScrollBar(Qt::Vertical,this);

QHBoxLayout* layout = new QHBoxLayout(this);

layout->addWidget(m_ListWidget);

layout->addWidget(m_VScrollBar);

layout->setMargin(0);

layout->setSpacing(0);

setLayout(layout);

connect(m_VScrollBar,SIGNAL(valueChanged(int)),this,SLOT(DisplayListView(int)));

connect(this,SIGNAL(SendReSizeSignal(int,int)),m_ListWidget->GetList(),SLOT(ReSizeSlot(int,int)));

}

Test::~Test()

{

}

void Test::resizeEvent(QResizeEvent * event)

{

int width = this->size().width()-m_VScrollBar->width();

int column = width/WIDTH;

column = width/WIDTH==0 ? 1 : column;

int row = COUNT/column;

row = COUNT%column==0 ? row : (row+1) ;

if(height()>=row*HEIGHT)

{

m_VScrollBar->setMinimum(0);

m_VScrollBar->setMaximum(0);

m_VScrollBar->setHidden(true);

}

else

{

m_VScrollBar->setHidden(false);

int itemHeight = HEIGHT+GRAP;

m_VScrollBar->setMinimum(0);

int max = row*itemHeight-height();

int pageStep = height()-max;

m_VScrollBar->setMaximum(max);

m_VScrollBar->setPageStep(pageStep);

m_VScrollBar->setSingleStep(10);

}

int listViewHeight = row*(HEIGHT+GRAP);

listViewHeight = listViewHeight > this->size().height() ? listViewHeight : this->size().height();

m_ListWidget->GetList()->resize(this->size().width(),listViewHeight);

emit SendReSizeSignal(row,column);

QWidget::resizeEvent(event);

}

void Test::DisplayListView(int len)

{

m_ListWidget->GetList()->move(0,-len);

}

*/

Test::Test(QWidget *parent) : QWidget(parent)

{

m_ListWidget = new MyListWidget(this);

m_VScrollBar = new QScrollBar(Qt::Vertical,this);

QHBoxLayout* layout = new QHBoxLayout(this);

layout->addWidget(m_ListWidget);

layout->addWidget(m_VScrollBar);

layout->setMargin(0);

layout->setSpacing(0);

setLayout(layout);

connect(m_VScrollBar,SIGNAL(valueChanged(int)),this,SLOT(DisplayListView(int)));

connect(this,SIGNAL(SendReSizeSignal(int,int)),m_ListWidget->GetList(),SLOT(ReSizeSlot(int,int)));

}

Test::~Test()

{

}

void Test::resizeEvent(QResizeEvent * event)

{

int width = this->size().width()-m_VScrollBar->width();

int column = width/WIDTH;

column = width/WIDTH==0 ? 1 : column;

int row = COUNT/column;

row = COUNT%column==0 ? row : (row+1) ;

if(height()>=row*HEIGHT)

{

m_VScrollBar->setMinimum(0);

m_VScrollBar->setMaximum(0);

m_VScrollBar->setHidden(true);

}

else

{

m_VScrollBar->setHidden(false);

int itemHeight = HEIGHT+GRAP;

m_VScrollBar->setMinimum(0);

int max = row*itemHeight-height();

int pageStep = height()-max;

m_VScrollBar->setMaximum(max);

m_VScrollBar->setPageStep(pageStep);

m_VScrollBar->setSingleStep(10);

}

int listViewHeight = row*(HEIGHT+GRAP);

listViewHeight = listViewHeight > this->size().height() ? listViewHeight : this->size().height();

m_ListWidget->GetList()->resize(this->size().width(),listViewHeight);

emit SendReSizeSignal(row,column);

QWidget::resizeEvent(event);

}

void Test::DisplayListView(int len)

{

m_ListWidget->GetList()->move(0,-len);

}在编译的时候,一直出现链接 问题,把工程清理了,重新编译都不行,后来 把项目的生成的那一套 build-untitled-Desktop_Qt_5_3_MSVC2010_OpenGL_32bit_qt_53_w-Debug 整个文件夹给删除了,就可以了。看来QT中只要代码正确,保证头文件中的声明和实现中有定义,代码正确,就可以把生成的编译的东西删除,再编译,就可以了。原先一直在编译,然后一直不成功,刚开始一直怀疑是代码的问题,弄了好半天,最后原来是这个问题~~~~~~~~~~~~~~

qlistview 自定义控件_QT中QListView中放置自定义控件并添加滚动条相关推荐

  1. html中加滑动条,给DIV添加滚动条的实现代码

    直接为div指定overflow属性为auto即可,但是必须指定div的高度,如下: 复制代码代码如下: 如果要出现水平滚动条,则: overflow-x:auto 同理,垂直滚动条为: overfl ...

  2. android自定义view获取控件,android 自定义控件View在Activity中使用findByViewId得到结果为null...

    转载:http://blog.csdn.net/xiabing082/article/details/48781489 1.  大家常常自定义view,,然后在xml 中添加该view 组件..如果在 ...

  3. 找到你的位置(JS在页面中的位置)最常用的方式是在页面中head部分放置script元素,浏览器解析head部分就会执行这个代码,然后才解析页面的其余部分...

    找到你的位置(JS在页面中的位置) 我们可以将JavaScript代码放在html文件中任何位置,但是我们一般放在网页的head或者body部分. 放在<head>部分 最常用的方式是在页 ...

  4. 添加Aforge控件,报错“在.....中没有可放置在工具箱上的控件”

    添加Aforge控件,报错"在-中没有可放置在工具箱上的控件" 1.先添加AForge系列引用 工具–>NuGet包管理器–>管理解决方案的NuGet程序包 之后,打开 ...

  5. MFC中动态创建控件及添加消息响应的方法实例

    动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个容器,一般是对话框, ...

  6. eclipse中ast_JavaParser中AST节点的观察者

    eclipse中ast 我们离JavaParser 3.0的第一个候选发布版本越来越近. 我们添加的最后一项功能是支持观察抽象语法树的所有节点的更改. 当我为此功能编写代码时,我收到了Danny va ...

  7. 关于WPF中Popup中的一些用法的总结

    原文:关于WPF中Popup中的一些用法的总结 Popup控件是一个常用的非常有用的控件,顾明思义就是弹出式控件,首先我们来看看MSDN对它的解释吧,表示具有内容的弹出窗口,这个是非常重要的控件,我们 ...

  8. java indexof 子字符串_Java中字符串中子串的查找共有四种方法(indexof())

    Java中字符串中子串的查找共有四种方法(indexof()) Java中字符串中子串的查找共有四种方法,如下: 1.int indexOf(String str) :返回第一次出现的指定子字符串在此 ...

  9. win10html5无法播放,win10系统中网页中无法播放视频怎么办

    近日有win10系统用户要通过浏览器来打开网页观看视频的时候,却发现在网页中打开视频的时却无法播放,这是怎么回事呢,经过分析是由于Adobe Flash Player ActiveX插件未安装.版本过 ...

  10. Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断后的处理

    介绍Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断后的处. Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断或关机后,重新开机,运行数据库 ...

最新文章

  1. oracle查询当前归档scn_【学习笔记】Oracle数据库 查看归档日志存放的位置
  2. java 操作数据库
  3. 年度总结——文字留住岁月,情感点缀年华
  4. NGINX最新API管理模块已可用,针对内部和外部API进行了优化
  5. 高中计算机网络安全教案,浙教版高中信息技术教案信息安全
  6. 一致性哈希算法与Java实现
  7. javax.jdo.option.ConnectionURL配置的问题
  8. ABP Framework V4.4 RC 新增功能介绍
  9. python中continue只结束本次循环_循环(while,break,continue),转义字符
  10. 大工19春《计算机组成原理》,大工19春《计算机组成原理》在线作业3.doc
  11. jquery :eq选择器和eq()方法的用法与比较
  12. 传输rp文件到ftp服务器并通过浏览器访问html
  13. js 实现文件上传 php,JS+php后台实现文件上传功能详解
  14. Java旅游网站源码+页面
  15. laravel学习笔记
  16. matlab 博弈论代码,各种博弈论详解(示例代码)
  17. 不要盲目跟风:中小企业运营自媒体需三思而后行
  18. 麦当劳中国全年将招聘超18万人;印度两家仿制药企获准生产吉利德瑞德西韦 | 美通企业日报...
  19. 带你了解面向对象的设计原则
  20. 准备工作(正则表达式学习)

热门文章

  1. python can通信_Python中的高级/抽象Canbus接口
  2. Python url的编码转换
  3. wifi mouse hd for linux,wifi mouse hd客户端PC版下载_wifi mouse hd客户端PC版官方下载-太平洋下载中心...
  4. java udp转发_【Java】UDP发包的简单实现
  5. win10命令行压缩/解压缩文件
  6. 三菱触摸屏怎么改时间_三菱plc的触摸屏程序,三菱触摸屏如何更改时间
  7. Bioedit 使用
  8. 电脑装机必备软件清单
  9. ftp服务器和文件夹共享文件夹,ftp服务器和文件夹共享文件夹
  10. qlv视频转换器免费版_推荐几款强大的视频剪辑软件