Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ QTableWidget и список выделенных строк через Ctrl

Автор: RazrFalcon 12.3.2011, 19:06

Выделяются только строки, так как:
table->setSelectionBehavior(QAbstractItemView::SelectRows);

Если выбрать одну - все нормально. Выделить мышкой несколько, или с шифтом - тоже нормально.
А если выделять строки через Ctrl+ЛКМ - оно понимает количество выделенных строк, но значения в них только из первой выделенной.

Пример:

Цитата(Shift)
"As Daylight Dies"
"Guardians At The Gate"
"No Return"

Цитата(Ctrl)
"As Daylight Dies"
"As Daylight Dies"
"As Daylight Dies"


Список получаю так:
List<QTableWidgetItem *> selectedList = table->selectedItems();

Автор: Rocky 12.3.2011, 23:01

Ну... супер!!!

ЗЫ.
Вопрос-то где? ))

Автор: RazrFalcon 12.3.2011, 23:07

Вопрос в том, что
List<QTableWidgetItem *> selectedList = table->selectedItems();

выдает мне такое вывод
"As Daylight Dies"
"As Daylight Dies"
"As Daylight Dies"

то есть все строки "равны" первой выделенной.

А мне нужно получить номера строк, которые выделены.

Автор: Rocky 12.3.2011, 23:31

ща че-нить отвечу )))))0
------------------------

У себя проверил - все работает как не выделяй. Qt 4.7.1. Покажи код, как именно получаешь текст из selectedList?

Автор: RazrFalcon 13.3.2011, 0:05

MainWindow::MainWindow()
{
    connect(table,SIGNAL(itemSelectionChanged()),this,SLOT(on_itemSeletionCahnged()));
}

void MainWindow::on_itemSeletionCahnged()
{
    QList<QTableWidgetItem *> selectedList =  table->selectedItems();
    qDebug()<<"Count:"<<selectedList.count();
    qDebug()<<"Row 1:"<<selectedList.at(0)->row();
    qDebug()<<"Row 2:"<<selectedList.at(1)->row();
    qDebug()<<"Row 4:"<<selectedList.at(2)->row();
}


Цитата
Count: 42 //тут через shift c 1 по 3
Row 1: 0
Row 2: 1
Row 4: 2
Count: 42 //тут через ctrl c 1 по 3
Row 1: 0
Row 2: 0
Row 4: 0


Тоже самое и тут:
void MainWindow::on_cellClicked(int row,int)
{
    QList<QTableWidgetItem *> selectedList =  table->selectedItems();
    qDebug()<<"Count:"<<selectedList.count();

    QStringList templist1;
    for (int i=0; i<selectedList.count()/14; i++)
    {
        templist1.append(table->item(selectedList.at(i)->row(),0)->text());
        qDebug()<<table->item(selectedList.at(i)->row(),0)->text();
    }
}

Автор: Rocky 13.3.2011, 0:36

Ну так все правильно ты и получаешь. У тебя selectedList что содержит? Айтемы а не ряды. Тебе нужно цикл по всем айтемам делать, а уже внутри разруливать через continue в случае если колонка айтема - не та, которая тебе нужна.

Автор: RazrFalcon 13.3.2011, 1:17

Я знаю. Ошибка была рядом. Теперь работает.

void MainWindow::on_cellClicked(int row,int)
{
   QList<QTableWidgetItem *> selectedList =  table->selectedItems();
   for (int i=0; i<selectedList.count(); i+=14) //14 - количество столбцов.
    {
        qDebug()<<selectedList.at(i)->text();
    }
}

У меня был слишком муторный способ.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)