Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: QCasper от Ноябрь 05, 2006, 15:34



Название: QTableWidget (Qt 4.2.0)
Отправлено: QCasper от Ноябрь 05, 2006, 15:34
Меня уже этот тэйбл запарил в 4.2.
Предлагается скомпилить вот это:


Код:
#include <qapplication.h>
#include <qmainwindow.h>
#include <qtablewidget.h>
#include <QTableWidgetItem>

int main(int argc, char *argv[]) {
QApplication a(argc, argv);

QMainWindow w;

QTableWidget *tb = new QTableWidget(&w);
w.setCentralWidget(tb);
w.show();

int colCnt = 5;
tb->setColumnCount(colCnt);
tb->insertRow(0);
for (int i=0; i<colCnt; i++) {
QTableWidgetItem *item = new QTableWidgetItem("Privet");
item->setFlags(Qt::ItemIsEditable);
tb->setItem(0, i, item);
}

a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));
return a.exec();
}


и просьба объяснить мне почему я не могу редактировать текст в ячейках.


Название: QTableWidget (Qt 4.2.0)
Отправлено: Dendy от Ноябрь 05, 2006, 15:53
Поправь:

Код:
item->setFlags(item->flags() | Qt::ItemIsEditable);


;)


Название: QTableWidget (Qt 4.2.0)
Отправлено: QCasper от Ноябрь 05, 2006, 16:08
Цитата: "Dendy"
Поправь:

Код:
item->setFlags(item->flags() | Qt::ItemIsEditable);


;)


спасибо, заработало. А можно логическое объяснение? В принципе я согласен, что так делать правильнее и логичнее, но в 4.1 работало и так, как я первый раз написал.


Название: QTableWidget (Qt 4.2.0)
Отправлено: aster_x от Декабрь 17, 2006, 15:56
У меня так и не работает:
Код:

void Dialog::loadMatrix (matrix * a, QTableWidget * b){
if (!a) return;
b->setRowCount (a->show_x ()-1);
b->setColumnCount (a->show_y () + 3);
for (int i=0; i<a->show_x (); i++){
for (int j=0; j<2; j++){
   QString tstr;
if (j<2) tstr = QString ("%1").arg (a->show_elem (i, j));
else tstr = QString ("0");
      QTableWidgetItem * temp = new QTableWidgetItem ("sdf");
       temp->setFlags(temp->flags() | Qt::ItemIsEditable);
  b->setItem (i, j, temp);
   delete temp;
}
}
}

Размеры таблички меняются, а содержимое не появляется.
Почему нет аналога setText как оно было в QTable...


Название: QTableWidget (Qt 4.2.0)
Отправлено: bigirbis от Декабрь 17, 2006, 16:14
Надо внимательнее читать описание метода:
Цитировать
void QTableWidget::setItem ( int row, int column, QTableWidgetItem * item )
Sets the item for the given row and column to item.
The table takes ownership of the item.

Вообще, идеология Qt в таких случаях предусматривает смену родителя. Соответственно, стрелять объект - кощунство. Т.е.
Код:
delete temp;

надо удалить.


Название: QTableWidget (Qt 4.2.0)
Отправлено: Вячеслав от Декабрь 17, 2006, 23:21
А на куя вообще флаги трогать - разве оно (редактирование) по умолчанию не разрешено ?
Код:

for(int row=0;row<30;row++)
for(int col=0;col<3;col++)
{
QTableWidgetItem *newItem = new QTableWidgetItem("0000");
mTable->setItem(row, col, newItem);
}


фсе прекрасно редактируеться .....
PS 4.2.(0|2) ;)


Название: QTableWidget (Qt 4.2.0)
Отправлено: aster_x от Декабрь 18, 2006, 07:14
Цитата: "bigirbis"
Надо внимательнее читать описание метода:
Цитировать
void QTableWidget::setItem ( int row, int column, QTableWidgetItem * item )
Sets the item for the given row and column to item.
The table takes ownership of the item.

Вообще, идеология Qt в таких случаях предусматривает смену родителя. Соответственно, стрелять объект - кощунство. Т.е.
Код:
delete temp;

надо удалить.

Сенки, и действительно.