qlistview 自定义控件_QT中QListView中放置自定义控件并添加滚动条
转载 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中放置自定义控件并添加滚动条相关推荐
- html中加滑动条,给DIV添加滚动条的实现代码
直接为div指定overflow属性为auto即可,但是必须指定div的高度,如下: 复制代码代码如下: 如果要出现水平滚动条,则: overflow-x:auto 同理,垂直滚动条为: overfl ...
- android自定义view获取控件,android 自定义控件View在Activity中使用findByViewId得到结果为null...
转载:http://blog.csdn.net/xiabing082/article/details/48781489 1. 大家常常自定义view,,然后在xml 中添加该view 组件..如果在 ...
- 找到你的位置(JS在页面中的位置)最常用的方式是在页面中head部分放置script元素,浏览器解析head部分就会执行这个代码,然后才解析页面的其余部分...
找到你的位置(JS在页面中的位置) 我们可以将JavaScript代码放在html文件中任何位置,但是我们一般放在网页的head或者body部分. 放在<head>部分 最常用的方式是在页 ...
- 添加Aforge控件,报错“在.....中没有可放置在工具箱上的控件”
添加Aforge控件,报错"在-中没有可放置在工具箱上的控件" 1.先添加AForge系列引用 工具–>NuGet包管理器–>管理解决方案的NuGet程序包 之后,打开 ...
- MFC中动态创建控件及添加消息响应的方法实例
动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个容器,一般是对话框, ...
- eclipse中ast_JavaParser中AST节点的观察者
eclipse中ast 我们离JavaParser 3.0的第一个候选发布版本越来越近. 我们添加的最后一项功能是支持观察抽象语法树的所有节点的更改. 当我为此功能编写代码时,我收到了Danny va ...
- 关于WPF中Popup中的一些用法的总结
原文:关于WPF中Popup中的一些用法的总结 Popup控件是一个常用的非常有用的控件,顾明思义就是弹出式控件,首先我们来看看MSDN对它的解释吧,表示具有内容的弹出窗口,这个是非常重要的控件,我们 ...
- java indexof 子字符串_Java中字符串中子串的查找共有四种方法(indexof())
Java中字符串中子串的查找共有四种方法(indexof()) Java中字符串中子串的查找共有四种方法,如下: 1.int indexOf(String str) :返回第一次出现的指定子字符串在此 ...
- win10html5无法播放,win10系统中网页中无法播放视频怎么办
近日有win10系统用户要通过浏览器来打开网页观看视频的时候,却发现在网页中打开视频的时却无法播放,这是怎么回事呢,经过分析是由于Adobe Flash Player ActiveX插件未安装.版本过 ...
- Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断后的处理
介绍Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断后的处. Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断或关机后,重新开机,运行数据库 ...
最新文章
- oracle查询当前归档scn_【学习笔记】Oracle数据库 查看归档日志存放的位置
- java 操作数据库
- 年度总结——文字留住岁月,情感点缀年华
- NGINX最新API管理模块已可用,针对内部和外部API进行了优化
- 高中计算机网络安全教案,浙教版高中信息技术教案信息安全
- 一致性哈希算法与Java实现
- javax.jdo.option.ConnectionURL配置的问题
- ABP Framework V4.4 RC 新增功能介绍
- python中continue只结束本次循环_循环(while,break,continue),转义字符
- 大工19春《计算机组成原理》,大工19春《计算机组成原理》在线作业3.doc
- jquery :eq选择器和eq()方法的用法与比较
- 传输rp文件到ftp服务器并通过浏览器访问html
- js 实现文件上传 php,JS+php后台实现文件上传功能详解
- Java旅游网站源码+页面
- laravel学习笔记
- matlab 博弈论代码,各种博弈论详解(示例代码)
- 不要盲目跟风:中小企业运营自媒体需三思而后行
- 麦当劳中国全年将招聘超18万人;印度两家仿制药企获准生产吉利德瑞德西韦 | 美通企业日报...
- 带你了解面向对象的设计原则
- 准备工作(正则表达式学习)
热门文章
- python can通信_Python中的高级/抽象Canbus接口
- Python url的编码转换
- wifi mouse hd for linux,wifi mouse hd客户端PC版下载_wifi mouse hd客户端PC版官方下载-太平洋下载中心...
- java udp转发_【Java】UDP发包的简单实现
- win10命令行压缩/解压缩文件
- 三菱触摸屏怎么改时间_三菱plc的触摸屏程序,三菱触摸屏如何更改时间
- Bioedit 使用
- 电脑装机必备软件清单
- ftp服务器和文件夹共享文件夹,ftp服务器和文件夹共享文件夹
- qlv视频转换器免费版_推荐几款强大的视频剪辑软件