-07-13添加留言
我要用的qlistview建立一棵树,这棵树满足一下特点:
1,qlistview中随意添加节点
2,qlistview中奇偶数的节点背景色不同,这样好区分东西.
3,qlistview中单击该节点的时候该节点变为一种新的背景色.
4,qlistview中单击其他节点时,原来单击的节点回复原来的背景色,注意是原来的.
5,qlistview中单击节点时获得该节点的数据.
下面给出代码:
#include
这是必须引入的类之一
另外我在ui里边随意创建了一个listview
QStandardItemModel * mulu1Model ;
这是必须在工程中的h文件必须声明的QStandardItemModel 对象.这样方便下面调用.
void MainWindow::listviewItemClicked(QModelIndex index)
{
qDebug() << index.data().toString();
for(int i=0;imulu1Model->rowCount(index.parent());i++)
{
QStandardItem *item = this->mulu1Model->item(i);
if(item->index() == index)
{
{
QLinearGradient linearGrad(QPointF(0, 0), QPointF(200, 200));
linearGrad.setColorAt(0, Qt::red);
QBrush brush(linearGrad);
item->setBackground(brush);
}
}
else
{
if(i % 2 == 1)
{
QLinearGradient linearGrad(QPointF(0, 0), QPointF(200, 200));
linearGrad.setColorAt(0, Qt::darkGreen);
linearGrad.setColorAt(1, Qt::yellow);
QBrush brush(linearGrad);
item->setBackground(brush);
}
else
{
QLinearGradient linearGrad(QPointF(0, 0), QPointF(200, 200));
linearGrad.setColorAt(0, Qt::white);
linearGrad.setColorAt(1, Qt::white);
QBrush brush(linearGrad);
item->setBackground(brush);
}
}
}
// this->ui->listView->update(index);
qDebug() << index.data().toString();
}
以上函数是单击qlistview节点时触发的.
void MainWindow::initListview(QStringList *list)
{
mulu1Model= new QStandardItemModel(this);
QStringList strList;
strList.append("string1");
strList.append("string2");
strList.append("string3");
strList.append("string4");
strList.append("string5");
strList.append("string6");
strList.append("string7");
strList << "string8";
strList += "string9";
int nCount = strList.size();
for(int i = 0; i < nCount; i++)
{
QString string = static_cast(strList.at(i));
QStandardItem *item = new QStandardItem(string);
if(i % 2 == 1)
{
QLinearGradient linearGrad(QPointF(0, 0), QPointF(200, 200));
linearGrad.setColorAt(0, Qt::darkGreen);
linearGrad.setColorAt(1, Qt::yellow);
QBrush brush(linearGrad);
item->setBackground(brush);
}
mulu1Model->appendRow(item);
}
for(int i = 0; i < nCount; i++)
{
QString string = static_cast(strList.at(i));
QStandardItem *item = new QStandardItem(string);
if(i % 2 == 1)
{
QLinearGradient linearGrad(QPointF(0, 0), QPointF(200, 200));
linearGrad.setColorAt(0, Qt::darkGreen);
linearGrad.setColorAt(1, Qt::yellow);
QBrush brush(linearGrad);
item->setBackground(brush);
}
mulu1Model->appendRow(item);
}
for(int i = 0; i < nCount; i++)
{
QString string = static_cast(strList.at(i));
QStandardItem *item = new QStandardItem(string);
if(i % 2 == 1)
{
QLinearGradient linearGrad(QPointF(0, 0), QPointF(200, 200));
linearGrad.setColorAt(0, Qt::darkGreen);
linearGrad.setColorAt(1, Qt::yellow);
QBrush brush(linearGrad);
item->setBackground(brush);
}
mulu1Model->appendRow(item);
}
this->ui->listView->setModel(mulu1Model);
connect(this->ui->listView,SIGNAL(clicked(QModelIndex)),this,SLOT(listviewItemClicked(QModelIndex)));
}
以上函数是初始化qlistview.
构造函数里必须调用这个初始化函数.
初始化qlistview里边有几行重复的,是为了测试行数过多是否会导致操作变缓慢,测试结果说明这个数量下没问题.
暂时没有相关的文章.