⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 panelswitcher.cpp

📁 爱可视605看PDF程式源代码, 基于APDF
💻 CPP
字号:
#include "panelswitcher.h"#include <qapplication.h>#include <qlayout.h>#include <qobjectlist.h>#include <qpixmap.h>#include <qtimer.h>#include <stdio.h>CachingWidget::CachingWidget(QWidget *parent, const char *name)	: QWidget(parent, name) {	setBackgroundMode(NoBackground);}void CachingWidget::setCached(bool enable) {	if(enable) {		m_buffer= QPixmap::grabWidget(this);		QObjectList *l= queryList("QWidget");		QObjectListIt it(*l);		QObject *obj;		while((obj= it.current()) != NULL) {			((QWidget*) obj)->hide();			++it;		}		delete l;	} else {		m_buffer.resize(0, 0);		QObjectList *l= queryList("QWidget");		QObjectListIt it(*l);		QObject *obj;		while((obj= it.current()) != NULL) {			((QWidget*) obj)->show();			++it;		}		delete l;	}}void CachingWidget::paintEvent(QPaintEvent *evt) {	if(!m_buffer.isNull()) {		QPainter p(this);		p.drawPixmap(evt->rect().topLeft(), m_buffer, evt->rect());	}}void CachingWidget::resizeEvent(QResizeEvent*) {	setCached(false);}//--------------------------------//PanelSwitcher::PanelSwitcher(QWidget *parent, const char *name)	: QScrollView(parent, name)	, m_curpanel(0)	, m_oldpanel(0) {	setVScrollBarMode(AlwaysOff);	setHScrollBarMode(AlwaysOff);	setFrameStyle(NoFrame);}void PanelSwitcher::showPanel(int index) {	m_oldpanel= m_curpanel;	m_curpanel= index;	if(m_entries.at(m_curpanel) != NULL) {		m_entries.at(m_curpanel)->setFocus();		emit panelChanged();			if(m_oldpanel != m_curpanel) {			if(m_entries.at(m_oldpanel) != NULL && m_entries.at(m_oldpanel)->isA("CachingWidget")) {				((CachingWidget*) m_entries.at(m_oldpanel))->show();				((CachingWidget*) m_entries.at(m_oldpanel))->setCached(true);			}					if(m_entries.at(m_curpanel) != NULL && m_entries.at(m_curpanel)->isA("CachingWidget")) {				((CachingWidget*) m_entries.at(m_curpanel))->show();				((CachingWidget*) m_entries.at(m_curpanel))->setCached(true);			}					animate();		}	}}void PanelSwitcher::animate() {	int ofsa, ofsb;	for(int i= 0; i < 16; i++) {		ofsa= contentsX();		ofsb= m_curpanel* width();			if(ofsa == ofsb)			return;			if(ofsa < ofsb) {			ofsa+= 20;			if(ofsa > ofsb)				ofsa= ofsb;		}		if(ofsa > ofsb) {			ofsa-= 20;			if(ofsa < ofsb)				ofsa= ofsb;		}		setContentsPos(ofsa, 0);		if(ofsa == ofsb)			break;	}	if(ofsa != ofsb) {		QTimer::singleShot(0, this, SLOT(animate()));		qApp->processOneEvent();	} else {		if(m_entries.at(m_oldpanel)!= NULL && m_entries.at(m_oldpanel)->isA("CachingWidget"))			((CachingWidget*) m_entries.at(m_oldpanel))->setCached(false);			if(m_entries.at(m_curpanel) != NULL && m_entries.at(m_curpanel)->isA("CachingWidget"))			((CachingWidget*) m_entries.at(m_curpanel))->setCached(false);	}}int PanelSwitcher::visibleIndex() const {	return m_curpanel;}QWidget* PanelSwitcher::visiblePanel() {	return m_entries.at(m_curpanel);}QWidget* PanelSwitcher::panelAt(int index) {	return m_entries.at(index);}void PanelSwitcher::addPanel(QWidget *panel, uint index) {	for(uint i= 0; i < index; i++)		if(i >= m_entries.count())			m_entries.append(NULL);	m_entries.insert(index, panel);	resizeContents(m_entries.count()* width(), height());	addChild(panel, index* width(), 0);	panel->resize(width(), height());	panel->show();}void PanelSwitcher::resizeEvent(QResizeEvent *evt) {	QScrollView::resizeEvent(evt);	for(uint i= 0; i < m_entries.count(); i++) {		if(m_entries.at(i) != NULL)			m_entries.at(i)->setGeometry(i* width(), 0, width(), height());	}	resizeContents(m_entries.count()* width(), height());	setContentsPos(m_curpanel* width(), 0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -