2013-09-26 3 views
1

У меня есть подклассу QTableWidget, чтобы добавить некоторые функции. Я также использовал метод myQTableWidgetSubclass->setRowCount(10);.Создание QTableWidget редактируемые строки за строкой, как с доступом к MS

Проблема в том, что таблица не редактируется. Цель состоит в том, чтобы позволить пользователю редактировать строки за строкой, например. первый первый ряд, и когда это будет готов (т.е. пользователь заполняет необходимые данные в), то второй и т.д.

я должен был бы подобную функциональность «MS таблицу доступа»

ответ

1

Теоретически это очень просто, но люди не будут писать код для вас с нуля.

1) Вам нужно будет использовать void QTableWidgetItem::setFlags(Qt::ItemFlags flags), чтобы сделать элементы редактируемыми и нередактируемыми. Вы можете использовать этот метод для каждого элемента по своему усмотрению.

Смотрите следующее описание значения перечисления из документации Qt::ItemFlags:

Qt :: ItemIsEditable 2 может быть отредактирована.

2) Как только это будет сделано, вам необходимо соединить свой пользовательский слот с соответствующим сигналом элемента, который только что был отредактирован. Затем ваш слот будет изменять порядок редактирования элементов соответственно.

Вот соответствующие сигналы, которые могут представлять интерес для Вас:

* void QTableWidget::cellChanged(int row, int column) [signal] 
* void QTableWidget::currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn) [signal] 
* void QTableWidget::currentItemChanged(QTableWidgetItem * current, QTableWidgetItem * previous) [signal] 
* void QTableWidget::itemChanged(QTableWidgetItem * item) [signal] 

Тогда вам нужно что-то вроде этого:

connect(myQTableWidgetSubclass, SIGNAL(selectedSignalFromAbove), this, SLOT(mySlotInTheClass)); 

// ... 

void MyClass::mySlotInTheClass(...) 
{ 
    // ... 
    myTableWidgetItemX.setFlags(...); 
    // ... 
} 
+0

так, если я understanded отлично, я вставлю editableitems для первой строки, когда пользователь заполняет строку entier данными, я вставляю редактируемый элемент для следующей строки !! – advseo32

+0

@ advseo32: Да, но обязательно. Вы можете заполнить таблицу множеством строк, но только редактируемые элементы для первого, а затем вы начнете переключать редактируемый флаг в соответствии с вашей пользовательской логикой. – lpapp

+0

я есть использовать этот код, но не работает (Int строки = 0; строка < ui-> tableWidget-> ROWCOUNT(); строка ++) { для (INT Col = 0; Col < ui-> tableWidget-> ColumnCount(); Col ++) { QTableWidgetItem * item = NULL; if (row! = 0) { item = new QTableWidgetItem; item-> setFlags (Qt :: ItemIsEditable | Qt :: ItemIsEnabled); ui-> tableWidget-> setItem (0, col, item); } else { item = new QTableWidgetItem; item-> setFlags (item-> flags() & ~ Qt :: ItemIsEditable); ui-> tableWidget-> setItem (0, col, item); }}} – advseo32

 Смежные вопросы

  • Нет связанных вопросов^_^