2014-10-06 9 views
1

У меня QPushbutton в каждой строке QTreeWidget. Я хочу получить индекс строк в событии click QPushbutton. Я использую это:Как получить индекс строк в событии клика QPushbutton в QTreewidget.

QPushButton btn=new QPushButton(); 
QTreeWidgetItem *Items=new QTreeWidgetItem(ui->treeWidget); 
ui->treeWidget->setItemWidget(Items,0,btn); 
connect(btn,SIGNAL(clicked()),this,SLOT(OnPreview())) 

На этом событии клика я хочу получить индекс строки нажатой кнопки? Спасибо, Ашиша

+0

Вам нужно либо вычислить индекс в слове 'OnPreview()' или сохранить сопоставление между кнопкой и индексом, которому он назначен. – vahancho

+0

thnx vahancho, я знаю, что должен сделать это в OnPreview(). но как это главное? ..? Любые догадки ..? – Ashish

ответ

3

Если строки не могут быть перемещены, я бы предложил использовать свойство:

Пример для простой структуры, использовать комплексный индекс для структуры дерева:

QPushButton btn=new QPushButton(); 
btn->setProperty("row", ui->treeWidget->topLevelItemCount()); 

void OnPreview() 
{ 
    int row = sender()->property("row").toInt(); 
    QTreeWidgetItem* item = ui->treeWidget->topLevelItem(row); 
} 

В противном случае, если количество строк, если не слишком большое, вы можете перебирать предметы, чтобы узнать, какие из них содержат кнопку:

Пример для pla в структуре, использовать комплексный индекс для структуры дерева:

void OnPreview() 
{ 
    for(int i = 0 ; i < ui->treeWidget->topLevelItemCount() ; i++) 
    { 
     QTreeWidgetItem* item = ui->treeWidget->topLevelItem(i); 
     if (ui->treeWidget->itemWidget(item, 0) == sender()) 
     { 
      ... 
     } 
    } 
} 

Если у вас есть большое количество строк, и они могут быть перемещены, создать хэш-таблицу соответствия кнопок и пунктов:

QHash<QObject*, QTreeWidgetItem*> hash; 

QPushButton* btn=new QPushButton(); 
QTreeWidgetItem *Items=new QTreeWidgetItem(ui->treeWidget); 
hash[btn] = Items; 

void OnPreview() 
{ 
    QTreeWidgetItem* item = hash[sender()]; 
    ... 
} 
1

Сначала вы необходимо определить карту, которая будет хранить ваши кнопки и соответствующие индексы. Делайте это предпочтительно в качестве переменной-члена вашего класса:

QMap<QObject, QModelIndex> map; 

Чем, в функции, где вы создаете кнопки:

{ 
    [..] 
    QPushButton *btn = new QPushButton(); 
    QTreeWidgetItem *Items = new QTreeWidgetItem(ui->treeWidget); 
    ui->treeWidget->setItemWidget(Items, 0, btn); 
    connect(btn, SIGNAL(clicked()), this, SLOT(OnPreview())); 

    QModelIndex index = ui->treeWidget->indexFromItem(Items); 
    map.insert(btn, index); 
    [..] 
} 

И, наконец, ваш слот:

void OnPreview() 
{ 
    QObject *btn = sender(); 
    QModelIndex index = map.value(btn); 
    [..] 
}