首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

QT treeWidget item 单击事件!解决方法

2012-04-17 
QT treeWidget item 单击事件!各位大虾,我创建了一个treeWidget,然后创建了两个item。我想实现在单击其中一

QT treeWidget item 单击事件!
各位大虾,我创建了一个treeWidget,然后创建了两个item。我想实现在单击其中一个item的时候,程序会打开相应的文件,比如图片什么的。我创建了signal和slot,但是编译后,单击item没有反应。各位热心朋友们帮我看一下是怎么回事吧?以下是我的代码:

SimpleView::SimpleView() 
{

  this->ui->treeWidget->setColumnCount(3);

  QStringList columns;
  columns << "first column" << "second column" << "third column";

  QTreeWidgetItem *item1 = new QTreeWidgetItem(this->ui->treeWidget, columns);
  item1->setText(0, "wo ai ni");
  QTreeWidgetItem *item2 = new QTreeWidgetItem(this->ui->treeWidget, columns);
  item2->setText(0, "pipi");

  this->ui->treeWidget->addTopLevelItem(item1);
  this->ui->treeWidget->addTopLevelItem(item2);

  connect(this->ui->treeWidget, SIGNAL(itemClicked(QTreeWidgetItem* item1, columns)), this, SLOT(slotOpen()));
};

void SimpleView::slotOpen()
{
...
}

[解决办法]
信号槽连接时语句中不能带参数名:
connect(this->ui->treeWidget, SIGNAL(itemClicked(QTreeWidgetItem* item1, columns)), this, SLOT(slotOpen()));
改成
connect(this->ui->treeWidget, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(slotOpen()));
[解决办法]
slotOpen最好定义成和signal一样的参数slotOpen(QTreeWidgetItem* item1, int columns),好知道信号是谁发来的
[解决办法]

探讨

你的方法有效,多谢了阿,还有个问题,如何在点击不同的item的时候让程序实现不同的结果?比如我点击item1,然后会自动打开文件1,我点击item2会自动打开文件2?

[解决办法]
探讨

引用:
引用:

你的方法有效,多谢了阿,还有个问题,如何在点击不同的item的时候让程序实现不同的结果?比如我点击item1,然后会自动打开文件1,我点击item2会自动打开文件2?

这种情况最好像darkdong所说的一样, 在slots中带上对应的参数(尽管信号槽机制中规定, 槽的参数可以小于等信号中的参数)~``……

热点排行