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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Установка в ячейку таблицы числа  (Прочитано 5701 раз)
Crazy D0G
Гость
« : Апрель 12, 2011, 18:03 »

Приветствую. Имеется слот, который вызывается при нажатии на кнопку. Он должен взять числа из ячеек одной таблицы, далее они определенным образом считаются и выводятся в ячейку другой таблицы. Код:
Код:
void mainWnd::distance()
{
    double x, y, tmp, firstPoint=1, secondPoint=2;
    QTableWidgetItem *item=new QTableWidgetItem;
    x=tableWidget->item(firstPoint, 1)-tableWidget->item(secondPoint, 1);
    y=tableWidget->item(firstPoint, 2)-tableWidget->item(secondPoint, 2);
    tmp=(x*x)+(y*y);
    item->setData(0, tmp);
    emit tableWidget_2->setItem(firstPoint, secondPoint, item);
}
Вопрос - как заставить выводить число?
Записан
blood_shadow
Гость
« Ответ #1 : Апрель 12, 2011, 22:10 »

Вопрос - как заставить выводить число?

если я правильно понял:
Код
C++ (Qt)
void mainWnd::distance()
{
   double x, y, tmp, firstPoint=1, secondPoint=2;
   QTableWidgetItem *item=new QTableWidgetItem;
   x=tableWidget->item(firstPoint, 1)-tableWidget->item(secondPoint, 1);
   y=tableWidget->item(firstPoint, 2)-tableWidget->item(secondPoint, 2);
   tmp=(x*x)+(y*y);
   QVariant tableData;
   item->setData(Qt::EditRole, tableData.setValue(tmp));
   emit tableWidget_2->setItem(firstPoint, secondPoint, item);
}

а что это за сигнал tableWidget_2->setItem(firstPoint, secondPoint, item); ? он самопальный?
если да то лучше поменять имя как-то оно не отбражает смысл операции + совпадает с именем слота
Записан
Crazy D0G
Гость
« Ответ #2 : Апрель 12, 2011, 23:41 »

blood_shadow, спасибо за внимание
Цитировать
а что это за сигнал tableWidget_2->setItem(firstPoint, secondPoint, item); ? он самопальный?
Это по глупости влепил emit, да, он там не нужен.
При использовании вашего кода ругается на invalid use of void expression в этой строке:
Код:
item->setData(Qt::EditRole, tableData.setValue(tmp));

Судя по родным мануалам, QTableWidgetItem текст выводит вообще без проблем, а вот вариантов вывода числа, я не нашел. Возможно неопытность сказывается, я не так уж и давно начал заниматься, хотя заинтересовало Qt еще осенью.
Возможно попробовать преобразовать число в строку? Но как-то не хочется думать, что нет в Qt собственного, более красивого способа.
Записан
blood_shadow
Гость
« Ответ #3 : Апрель 12, 2011, 23:51 »

blood_shadow, спасибо за внимание
Цитировать
а что это за сигнал tableWidget_2->setItem(firstPoint, secondPoint, item); ? он самопальный?
Это по глупости влепил emit, да, он там не нужен.
При использовании вашего кода ругается на invalid use of void expression в этой строке:
Код:
item->setData(Qt::EditRole, tableData.setValue(tmp));

Судя по родным мануалам, QTableWidgetItem текст выводит вообще без проблем, а вот вариантов вывода числа, я не нашел. Возможно неопытность сказывается, я не так уж и давно начал заниматься, хотя заинтересовало Qt еще осенью.
Возможно попробовать преобразовать число в строку? Но как-то не хочется думать, что нет в Qt собственного, более красивого способа.
а я там завтыкал еще колонку
вот прототип ф-ции
Код:
void QTreeWidgetItem::setData ( int column, int role, const QVariant & value ) 
поставь еще номер колонки на первое место
но если честно, то как раз простейшим вариантом для данного случая есть перевод числа в строку,
для этого есть даже статическая ф-ция QString::number() посмотри в ассистанте
Записан
Crazy D0G
Гость
« Ответ #4 : Апрель 13, 2011, 00:10 »

blood_shadow, вы мне дали прототип функции на void QTreeWidgetItem, а у меня ведь QTableWidgetItem Улыбающийся У QTableWidgetItem он такой, только что в ассистенте посмотрел:
Код:
void QTableWidgetItem::setData ( int role, const QVariant & value ) 
т.е. первый раз, что вы написали, было правильно. Там проблема из-за tableData.setValue(tmp) скорее всего, но знаний не хватает, чтобы объяснить почему.

Попробую ваш совет, по поводу преобразования, возможно это и вправду будет не худшим вариантов в данном случае.
Записан
blood_shadow
Гость
« Ответ #5 : Апрель 13, 2011, 10:07 »

blood_shadow, вы мне дали прототип функции на void QTreeWidgetItem, а у меня ведь QTableWidgetItem Улыбающийся У QTableWidgetItem он такой, только что в ассистенте посмотрел:
Код:
void QTableWidgetItem::setData ( int role, const QVariant & value ) 
т.е. первый раз, что вы написали, было правильно. Там проблема из-за tableData.setValue(tmp) скорее всего, но знаний не хватает, чтобы объяснить почему.

Попробую ваш совет, по поводу преобразования, возможно это и вправду будет не худшим вариантов в данном случае.
еще так можно попробовать
Код:
QVariant tableData(tmp);
item->setData(Qt::EditRole, tableData);
но все-таки через QString::number будет гораздо проще в данном варианте
Записан
Crazy D0G
Гость
« Ответ #6 : Апрель 13, 2011, 18:44 »

blood_shadow, походу там ничего нормального ни при моем, ни при вашем способе не вывело бы, так как "x" и "y" у меня типа double, a QTableWidget::item ( int row, int column ) типа QTableWidgetItem Улыбающийся Если сделать так:
Код:
void mainWnd::distance()
{
    int firstPoint=0, secondPoint=0;
    QTableWidgetItem *x=new QTableWidgetItem;
    x=tableWidget->takeItem(0, 0);
    tableWidget_2->setItem(firstPoint, secondPoint, x);
}
то работает - вырезает с первой таблицы значение(что конечно тоже нежелательно в условиях задачи) и вставляет в заданную ячейку второй таблицы.
Вот теперь другой уже вопрос возник - можно ли проводить арифметические операции с QTableWidgetItem, да и вообще, как же все-таки добраться до того, что в нем содержится, чтобы уже можно было умножать, делить и т.д.
Записан
blood_shadow
Гость
« Ответ #7 : Апрель 13, 2011, 19:02 »

blood_shadow, походу там ничего нормального ни при моем, ни при вашем способе не вывело бы, так как "x" и "y" у меня типа double, a QTableWidget::item ( int row, int column ) типа QTableWidgetItem Улыбающийся Если сделать так:
Код:
void mainWnd::distance()
{
    int firstPoint=0, secondPoint=0;
    QTableWidgetItem *x=new QTableWidgetItem;
    x=tableWidget->takeItem(0, 0);
    tableWidget_2->setItem(firstPoint, secondPoint, x);
}
то работает - вырезает с первой таблицы значение(что конечно тоже нежелательно в условиях задачи) и вставляет в заданную ячейку второй таблицы.
Вот теперь другой уже вопрос возник - можно ли проводить арифметические операции с QTableWidgetItem, да и вообще, как же все-таки добраться до того, что в нем содержится, чтобы уже можно было умножать, делить и т.д.
если честно я думал что это была задумка такая отнимать адреса и их записывать,
если же надо просто получить разницу значений:
Код
C++ (Qt)
x = tableWidget->item(firstPoint, 1).data(Qt::DisplayRole).toDouble() -
                         tableWidget->item(secondPoint, 1).data(Qt::DisplayRole).toDouble();
 
y = tableWidget->item(firstPoint, 2).data(Qt::DisplayRole).toDouble() -
                         tableWidget->item(secondPoint, 2).data(Qt::DisplayRole).toDouble();
tmp = (x * x) + (y * y);
QVariant tableData(tmp);
item->setData(Qt::EditRole, tableData);
 
 

если просто скопировать ячейку:
Код
C++ (Qt)
x = tableWidget->item();
tableWidget_2->setItem(firstPoint, secondPoint, x->clone());
 
Записан
Crazy D0G
Гость
« Ответ #8 : Апрель 13, 2011, 20:08 »

blood_shadow, большое вам спасибо! Кое-что новое вы мне показали, чего я не знал Улыбающийся Маленькая неточность у вас была, правильно вот так:
Код:
x = tableWidget->item(firstPoint, 0)->data(Qt::DisplayRole).toDouble() -
            tableWidget->item(secondPoint, 0)->data(Qt::DisplayRole).toDouble();
    y = tableWidget->item(firstPoint, 1)->data(Qt::DisplayRole).toDouble() -
            tableWidget->item(secondPoint, 1)->data(Qt::DisplayRole).toDouble();

За совет, как копировать ячейку тоже спасибо, как-то был не внимателен, когда описание QTableWidgetItem смотрел, не заметил clone.
Эта проблема решена Улыбающийся
Записан
blood_shadow
Гость
« Ответ #9 : Апрель 13, 2011, 21:17 »


За совет, как копировать ячейку тоже спасибо, как-то был не внимателен, когда описание QTableWidgetItem смотрел, не заметил clone.
Эта проблема решена Улыбающийся
ну так для этого мы и здесь, чтоб учиться, читайте ассистант, возьмите книгу Бланшета и Саммерфильда
там все хорошо разжевано Улыбающийся
Записан
Crazy D0G
Гость
« Ответ #10 : Апрель 13, 2011, 22:51 »

blood_shadow, думаю я тут еще не раз вопрос задам, так что готовьтесь и дальше учить Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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