Russian Qt Forum
Ноябрь 24, 2024, 09:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: QTableWidget - получение данных из выделенной строки  (Прочитано 32720 раз)
wildcat
Гость
« : Февраль 10, 2012, 10:51 »

Имеется QTableWidget, каким способом можно получить данные ячеек в строке и перенаправить их в lineEdit'ы?

Вот имеется такая штука как QTableWidget::selectedItems (), которая возвращает список всех выделенных элементов...
До меня не доходит, как можно изъять значение каждой выделенной ячейки в строке и передать их дальше.
Дайте пожалуйста наводку))
Записан
_OLEGator_
Гость
« Ответ #1 : Февраль 10, 2012, 10:59 »

%QTDIR%\bin\assistant.exe
Записан
alexman
Гость
« Ответ #2 : Февраль 10, 2012, 10:59 »

А ты QTableWidgetItem смотрел?
Записан
wildcat
Гость
« Ответ #3 : Февраль 10, 2012, 11:18 »

Да я им пользовался, когда получал данные из запроса sqlite.

вот получение данных конкретной ячейки знаю как... а как именно выделенной строки
Код
C++ (Qt)
QTableWidgetItem * QTableWidget::item ( int row, int column ) const
tableWidget->item(0,2)->text()
Записан
wildcat
Гость
« Ответ #4 : Февраль 10, 2012, 11:43 »

получилось что то вроде этого ))) :
Код
C++ (Qt)
void usbController::s_buttonUpdate()
{
  //qDebug() << tableWidget->selectedItems();
 
  QTableWidgetItem *item = new QTableWidgetItem();
  int i= tableWidget->selectionModel()->selectedRows().count(); //строка
  qDebug() << i;
  int j=0; //столбец
  QString text;
  while (j<6)
  {
      text=tableWidget->item(i,j)->text();
      j++;
      qDebug() << QString("Items in list: ") << text;
  }
 
}
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Февраль 10, 2012, 13:28 »

проще уж QTableWidget::selectedItems(). или QTableWidget::selectedRanges() если можно выделять группами.

P.S. зачем у тебя в коде присутствует строчка QTableWidgetItem *item = new QTableWidgetItem(); - непонятно.
« Последнее редактирование: Февраль 10, 2012, 13:30 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
wildcat
Гость
« Ответ #6 : Февраль 10, 2012, 13:50 »

вот выделяю строку и получаю ее значение:

Код
C++ (Qt)
int i= tableWidget->selectionModel()->selectedRows().count();

Почему то ее значение всегда больше 0-ля. Хотя выделяю первую строку, а выдает 1-цу...


А это строчка QTableWidgetItem *item = new QTableWidgetItem(); - ошибся, удалил.
Записан
mutineer
Гость
« Ответ #7 : Февраль 10, 2012, 13:53 »

может потому, что count() - это количество выделенных строк?
Записан
wildcat
Гость
« Ответ #8 : Февраль 10, 2012, 14:04 »

дошло))) вот что получилось:
Код
C++ (Qt)
int usbController::s_buttonUpdate()
{
 
  int i= tableWidget->currentRow(); //строка
  if (tableWidget->selectedItems().isEmpty ())
  {
       return true;
  }
  qDebug() << i; //QTableWidget
  int j=0; //столбец
  QString tx;
  while (j<6)
  {
      tx=tableWidget->item(i,j)->text();
 
      if (j==0) lineEdit_5->setText(tx);
      if (j==1) lineEdit_3->setText(tx);
      if (j==3) lineEdit_1->setText(tx);
      if (j==4) lineEdit_4->setText(tx);
      if (j==5) lineEdit_3->setText(tx);
      if (j==6) lineEdit_2->setText(tx);
 
      j++;
      qDebug() << QString("Items in list: ") << tx;
 
  }
 
   return true;
}
Записан
mutineer
Гость
« Ответ #9 : Февраль 10, 2012, 14:06 »

А про цикл for слышать не приходилось? Он бы тут был более к месту

Да и switch тоже удобный оператор...

Кстати, if (j==6) не выполнится
Записан
wildcat
Гость
« Ответ #10 : Февраль 10, 2012, 14:16 »

Код
C++ (Qt)
if (j==6) lineEdit_2->setText(tx);
- убрал. - он и не нужным был.

Про цикл for, слышал и пользовался... только не пойму чем здесь плох while ()?

switch - а как переключатель тут можно применить?

Сейчас вроде все норм работает... Только в самой таблицы имеется косяк...
Применил сортировку столбцов:
Код
C++ (Qt)
tableWidget->horizontalHeader()->moveSection(int ,int)

Таблица выводится при клике на кнопку. При первом клике все  норм, при втором клике таблица меняет расположении столбцов...
Записан
mutineer
Гость
« Ответ #11 : Февраль 10, 2012, 14:26 »

for(int j = 0; j < 6; ++j) - читается лучше, чем while в этом случае

вместо череды if-ов switch(j) {...} тоже чисто для улучшения читабельности кода
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #12 : Февраль 10, 2012, 14:27 »

for(int j = 0; j < 6; ++j) - читается лучше, чем while в этом случае

вместо череды if-ов switch(j) {...} тоже чисто для улучшения читабельности кода
А еще лучше, сложить lineEdit_* в контейнер.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
mutineer
Гость
« Ответ #13 : Февраль 10, 2012, 14:29 »

for(int j = 0; j < 6; ++j) - читается лучше, чем while в этом случае

вместо череды if-ов switch(j) {...} тоже чисто для улучшения читабельности кода
А еще лучше, сложить lineEdit_* в контейнер.

Ну это вообще в идеале:)
Записан
wildcat
Гость
« Ответ #14 : Февраль 10, 2012, 14:33 »

С контейнерами еще не работал... только начал учиться... когда то прогал на с++, но очень простые программы и очень давно.
« Последнее редактирование: Февраль 10, 2012, 14:43 от wildcat » Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.264 секунд. Запросов: 23.