Qt项视图类MVC之QListWidget

代码摘自C++ GUI Qt 4th:

头文件:

#ifndef FLOWCHARTSYMBOLPICKER_H
#define FLOWCHARTSYMBOLPICKER_H

#include <QtGui/QDialog>

class QListWidget;
class QPushButton;

class FlowChartSymbolPicker : public QDialog
{
	Q_OBJECT

public:
	FlowChartSymbolPicker(const QMap<int,QString>&symbolMap,QWidget *parent=0);
	int selectId() const { return id; }
	~FlowChartSymbolPicker();
protected:
	QPushButton *btnOK;
	QPushButton *btnCancel;
protected slots:
		void done(int result);
private:
	int id;
	QListWidget *listWidget;
};

#endif // FLOWCHARTSYMBOLPICKER_H
实现文件:

#include "flowchartsymbolpicker.h"
#include <QListWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QPushButton>
#include <qDebug>

FlowChartSymbolPicker::FlowChartSymbolPicker(const QMap<int,QString>&symbolMap,QWidget *parent/* =0 */)
{
	id=-1;
	listWidget=new QListWidget;

	QMapIterator<int,QString> i(symbolMap);
	while(i.hasNext())
	{
		i.next();
		QListWidgetItem *item=new QListWidgetItem(i.value(),listWidget);
		item->setIcon(QIcon(".//icon.png"));
		item->setData(Qt::UserRole,i.key());
	}
	btnOK=new QPushButton("OK");
	btnCancel=new QPushButton("Cancel");
	QHBoxLayout *btnLayout=new QHBoxLayout;
	btnLayout->addWidget(btnOK);
	btnLayout->addWidget(btnCancel);
	QVBoxLayout *mainLayout=new QVBoxLayout;//(this);
	//mainLayout->addStretch();    ///占满多余空间
	mainLayout->addWidget(listWidget);
	mainLayout->addLayout(btnLayout);

	setLayout(mainLayout);

	connect(btnOK,SIGNAL(clicked()),this,SLOT(accept()));  //调用done函数
	connect(btnCancel,SIGNAL(clicked()),this,SLOT(reject()));   ///调用done函数
}

void FlowChartSymbolPicker::done(int result)
{
	qDebug()<<"-----------------------------";
	id=-1;
	if(result==QDialog::Accepted)
	{
		QListWidgetItem *item=listWidget->currentItem();
		if(item)
		{
			id=item->data(Qt::UserRole).toInt();
		}
		qDebug()<<id<<"-----------------";
	}
	QDialog::done(result);
}

FlowChartSymbolPicker::~FlowChartSymbolPicker()
{

}
/*---------------------------------
QIcon XListWidget::iconForSymbol(const QString &symbolName)
{
QString fileName = ":/images/" + symbolName.toLower();
qDebug()<<"fileName"<<fileName;
fileName.replace(' ', '-');
return QIcon(fileName);
}
------------------------------------*/

程序截图:

其中:done函数是由QDialog重新实现的,当用户单击ok或cancel时,就会调用它。对于qt中MVC,还不太懂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值