Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Crazy D0G от Апрель 12, 2011, 18:03



Название: Установка в ячейку таблицы числа
Отправлено: 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);
}
Вопрос - как заставить выводить число?


Название: Re: Установка в ячейку таблицы числа
Отправлено: blood_shadow от Апрель 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); ? он самопальный?
если да то лучше поменять имя как-то оно не отбражает смысл операции + совпадает с именем слота


Название: Re: Установка в ячейку таблицы числа
Отправлено: Crazy D0G от Апрель 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 собственного, более красивого способа.


Название: Re: Установка в ячейку таблицы числа
Отправлено: blood_shadow от Апрель 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() посмотри в ассистанте


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

Попробую ваш совет, по поводу преобразования, возможно это и вправду будет не худшим вариантов в данном случае.


Название: Re: Установка в ячейку таблицы числа
Отправлено: blood_shadow от Апрель 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 будет гораздо проще в данном варианте


Название: Re: Установка в ячейку таблицы числа
Отправлено: Crazy D0G от Апрель 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, да и вообще, как же все-таки добраться до того, что в нем содержится, чтобы уже можно было умножать, делить и т.д.


Название: Re: Установка в ячейку таблицы числа
Отправлено: blood_shadow от Апрель 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());
 


Название: Re: Установка в ячейку таблицы числа
Отправлено: Crazy D0G от Апрель 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.
Эта проблема решена :)


Название: Re: Установка в ячейку таблицы числа
Отправлено: blood_shadow от Апрель 13, 2011, 21:17

За совет, как копировать ячейку тоже спасибо, как-то был не внимателен, когда описание QTableWidgetItem смотрел, не заметил clone.
Эта проблема решена :)
ну так для этого мы и здесь, чтоб учиться, читайте ассистант, возьмите книгу Бланшета и Саммерфильда
там все хорошо разжевано :)


Название: Re: Установка в ячейку таблицы числа
Отправлено: Crazy D0G от Апрель 13, 2011, 22:51
blood_shadow, думаю я тут еще не раз вопрос задам, так что готовьтесь и дальше учить :)