Вопросы с тегами [qtableview]

1

голосов
1

ответ
12

Просмотры

редактирование QAbstractTableModel без очистки предыдущих данных в ячейке

Я создал модель, основанную офф QAbstractTableModel, что позволяет пользователю редактировать данные в этой модели. Модель отображается в QTableView в QMainWindow. До сих пор в моей модели я могу сделать клетки для редактирования, и сохранить те типы пользователей после редактирования закончено. Проблема в том, что, когда пользователь начинает редактирование, это очищает 'предыдущего содержимого этой ячейки. Так что, если, например, я только хотел, чтобы изменить написание строки в ячейке, я должен заново ввести все значения. Я хотел бы при редактировании, что редактор будет начинаться с данными, уже в модели, а не пустой. Как я могу это сделать? Пример вопроса: Перед тем, как начать редактирование ячейки: Как только я начала редактирования, ячейка пуста. Я хотел бы, чтобы это звезда с предыдущим значением уже в модели: Вот минимальный пример моей модели. Моя текущая модель намного больше и использует-структуру, а не просто 2D массива QVariants для хранения данных. Заголовок: Const INT COLS = 2; константные INT ЧСТРОК = 6; Класс EditableTableModel: общественный QAbstractTableModel {Q_OBJECT частное: QVariant tableData [РЯДЫ] [COLS]; общественности: EditableTableModel (QObject * родитель = nullptr); INT ROWCOUNT (Const QModelIndex & родитель = QModelIndex ()) Const переопределение; INT ColumnCount (Const QModelIndex & родитель = QModelIndex ()) Const переопределение; QVariant данные (Const QModelIndex & индекс, Int Роль = Qt :: DisplayRole) Const переопределение; BOOL SetData (Const QModelIndex & индекс, Const QVariant & значение, Int Роль = Qt :: EditRole) переопределение; QVariant headerData (интермедиат раздел, Qt :: ориентации Ориентация, Int роль) Const переопределение; Qt :: ItemFlags флаги (Const QModelIndex и индекс) Const переопределение; сигналы: editCompleted недействительными (QString); }; Реализация: EditableTableModel :: EditableTableModel (QObject * родитель): QAbstractTableModel (родитель) {} INT EditableTableModel :: ROWCOUNT (Const QModelIndex & / * родитель * /) сопзЬ {вернуть дах; } INT EditableTableModel :: ColumnCount (Const QModelIndex & / * родитель * /) сопзЬ {вернуть COLS; } QVariant EditableTableModel :: данные (Const QModelIndex & индекса, Int роль) сопзЬ {INT = строка index.row (); INT Col = index.column (); переключатель (роль) {случай Qt :: DisplayRole: вернуть tableData [строки] [Col]; } Вернуть QVariant (); } BOOL EditableTableModel :: УстановитьДанные (Const QModelIndex и индекс, Const QVariant & значение, внутр роль) {если (роль == Qt :: EditRole) {если вернуться ложным (checkIndex (индекс)!); tableData [index.row ()] [индекс. колонка ()] = значение; возвращает истину; } Вернуться ложным; } QVariant EditableTableModel :: headerData (интермедиат раздел, Qt :: ориентация ориентирование, внутр роль) сопзЬ {если (роль == Qt :: DisplayRole && ориентация == Qt :: Horizontal) {переключатель (раздел) {случай 0: возвращение QString ("Имя"); Случай 1: возвращение QString ( "Last Name"); }} Вернуть QVariant (); } Qt :: ItemFlags EditableTableModel :: Флаги (Const QModelIndex и индекс) сопзЬ {вернуть Qt :: ItemIsEditable | QAbstractTableModel :: флаги (индекс); } Горизонтальный) {переключатель (раздел) {случай 0: возвращение QString ( "Имя"); Случай 1: возвращение QString ( "Last Name"); }} Вернуть QVariant (); } Qt :: ItemFlags EditableTableModel :: Флаги (Const QModelIndex и индекс) сопзЬ {вернуть Qt :: ItemIsEditable | QAbstractTableModel :: флаги (индекс); } Горизонтальный) {переключатель (раздел) {случай 0: возвращение QString ( "Имя"); Случай 1: возвращение QString ( "Last Name"); }} Вернуть QVariant (); } Qt :: ItemFlags EditableTableModel :: Флаги (Const QModelIndex и индекс) сопзЬ {вернуть Qt :: ItemIsEditable | QAbstractTableModel :: флаги (индекс); }
DaveK
1

голосов
2

ответ
450

Просмотры

QTableView не обновляется должным образом

Я создаю небольшую программу, которая принимает пользовательский ввод в модель, а затем показывает, что ввод в нескольких видах, которые принимают его через фильтры. Когда пользователь нажимает на кнопку, которая принимает на вход, программа обновляет количество клеток в мнениях, а затем изменяет эти клетки по мере необходимости так, что они вписываются в их районе. Моя проблема заключается в том, что клетка изменение размер не похоже на работу для одного из представлений по какой-то причине (я пытался искал различие, но не мог найти причину для того, что я испытываю). Я вызываю функцию клеток изменения размера в двух местах: dataChanged слот. resizeEvent слот. Если функция клеток изменение размера вызывается дважды в dataChanged, то вид делает обновление, однако это предполагает некоторые расчеты и доступ через пользовательский интерфейс и, очевидно, не должно произойти. Если изменить размер моего окна, то клетка изменяется должным образом. Я подозреваю, что я всегда за одно обновление - что вид не окрашивает, пока новое обновление не начнет получать рассчитать и затем, что новое обновление не будет отложена до следующего вычисления (так как изменение размера происходит много раз подряд он может просто действовать так же, как кнопка, но тверже / невозможно заметить). У меня есть некоторые грязные обходные пути: Как я уже говорил, если я снова называю свою функцию клеток изменения размера, обновление просматривать правильно. Если я удалить второй «если» в следующем фрагменте кода, то все работает. Я думал, что спасти мой компьютер какую-то работу только в обработке, когда весь вход был получен. Мое мышление было то, что, хотя dataChanged испускается для каждого отдельного элемента я вставляя, я только действительно нужно обновлять один раз все это в: ничтожной MainWindow :: on_dataChanged () {статические INT left_to_insert = -1; если (0> left_to_insert) {left_to_insert = m_model.rowCount () - 1; } Если (0 == left_to_insert) {... m_matrix_proxy.resize_to_fit (); adjust_matrix_cells_sizes (); }} --Left_to_insert ли это плохо обрабатывать только последний сигнал? Зачем? Я попытался назвать обновление () и / или перекрасить () как на матрице и в главном окне. Я попытался назвать оба этих на видовом экране в QTableView и попытался назвать их последовательно от самой матрицы до самого высокого родителя, который не делал мой сбой программы. (Ui-> матрица-> parentWidget () -> parentWidget () ...) Я попытался qApp-> processEvents (). Я даже прибегал к испуская resizeEvent, но это излишество ИМО, как это делает некоторые расчеты будут выполнены снова. Только в случае, если это как-то отношение: Данные отображаются правильно. Единственное, что не так в том, что клетки не изменить.
user2962533
1

голосов
0

ответ
292

Просмотры

Pyqt5 QAbstractTableModel dataChanged не обновляет данные

Я пытаюсь обновить QTableView после я получаю уведомление через pydispatcher изменения в системе. Я создать следующие функции Защиту ROWCOUNT (я, родитель = None): возвращает Len (self.m_list) Защиту ColumnCount (я, родитель = None): возвращать LEN (self.table_def) Защиту headerData (самости, Col, ориентации, роль ): если ориентация == Qt.Horizontal и роль == Qt.DisplayRole: возвращение self.table_def [Col] [ 'Заголовок'] вернуться QVariant () DEF данные (самостоятельно, индекс, роль = Qt.DisplayRole): если не индексировать .isValid (): не возвращать None, если index.row ()> = LEN (self.m_list) или index.row () <0: возвращение Отсутствует строка = index.row () Col = index.column () для печати ( "Вызывается для (% S,% S,% ы)»% (строка, столбец, роль)), если роль == Qt.DisplayRole: возвращение self.table_def [index.column ()] [ 'Функция'] (индекс. ряд ()) Элиф роль == Qt.BackgroundRole: партия = (index.row () // 100)% 2, если партия == 0:.. вернуть QApplication.palette () базу () возвращают QApplication.palette () AlternateBase () еще: возвращает None Защиты флагов (самоощущение, индекс): если не index.isValid (): возвращает None возвращение Qt.ItemIsEnabled Защиты update_model (самостоятельно, данные): печать ( 'update_model') index_1 = self.index (0, 0) index_2 = self.index (0, 1) self.dataChanged.emit (index_1, index_2, [Qt.DisplayRole]) линия self.dataChanged.emit (index_1, index_2, [Qt.DisplayRole]) не кажется Делать что-нибудь; то есть данные (самостоятельно, индекс, роль = Qt.DisplayRole) не вызывается. Если я нажимаю на столе, то данные (самостоятельно, индекс, роль = Qt.DisplayRole) называется и обновление таблицы. Исправление, я прямо сейчас называть beginResetModel () и endResetModel (). Это работает, но это не так, как она должна работать. Любая идея, что могло случиться?
PBareil
1

голосов
1

ответ
89

Просмотры

добавить функцию для предыдущего вопроса PySide2 QListView и QTableView

Предыдущий вопрос был PySide2 QListView QTableView проблема синхронизации Представьте, чтобы иметь еще dict4 в структуре данных: «dict4»: { «K8»: «v8», «EXISTING_DICT»: «dict2»}, что означает, что словарь может включать другой существующий толковый словарь. Таким образом, представительство в QTableView не должно быть непосредственно показал, но: 1) Показать только имя его в QTableView: k1 | v1 ------- k2 | v2 ------- k3 | v3 ------- dict2 2) Если двойной щелчок на нем: выберите существующий словарь в QListView, который будет запускать, чтобы показать его содержимое в QTableView, который в данном случае: k4 | v4
eddy2k
1

голосов
2

ответ
3.1k

Просмотры

Форматирование данных в QTableView

Я использую пользовательский делегат для отображения QDoubleSpinBoxes в виде QTableView. Эти spinboxes отображать их содержимое с двумя знаками после запятой. Моя проблема заключается в том, что я хотел бы QTableView также отображать эти цифры с двумя знаками после запятой, пока они не редактируется (в какой момент они не находятся в QDoubleSpinBox). Или, скорее, я хотел бы иметь возможность specifiy формата для содержимого QTableView в. Я попытался подкласс QStyledItemDelegate переопределить DisplayText, но по непонятной причине он выходит из строя. Она работает правильно, если я просто подкласс QItemDelegate. Я использую Qt 4.6.3 на Windows.
Etienne de Martel
1

голосов
1

ответ
1.6k

Просмотры

Qt: Как синхронизировать доступ к данным из нескольких потоков в установке модель / представление?

Как синхронизировать доступ к данным, доступ из нескольких потоков в Qt установки модели / представления? Я использую QTableView с классом модели. Модель расширяет QAbstractTableModel и имеет экземпляр пользовательского класса Net, который содержит фактические данные, которые будут отображаться в QTableView через данные () вызов (доступ к модели :: данные ()) Мой класс прослушивает сеть передачи данных и работает на отдельном потоке, из которого обновляет свои данные (простой массив фиксированного размера 10 строк). Данные в моем классе должны быть доступны как поток, который постоянно обновляет его и из Qt GUI путем вызова данных () на модели. Я бы предположил, что нужно использовать семафор для синхронизации доступа к моему массиву строк, но QAbstractTableModel :: данные () является константным методом, поэтому я не могу заблокировать повышение :: мьютекс в нем.
stefanB
1

голосов
1

ответ
1.1k

Просмотры

Как использовать многострочный текст / переносы строк в QTableView / QAbstractTableModel?

Я подклассы QAbstractTableModel и QTabelView (и QSortFilterProxyModel), и я хотел бы, чтобы многострочный текст, который будет отображаться и введенный пользователем в текстовых ячейках (в настоящее время, ударяя возврат будет подтвердить редактирование вместо вставки разрыва строки). Там должен быть какой-то простой флаг установлен, я просто не знаю, какой из них ...
basic6
1

голосов
1

ответ
331

Просмотры

Подклассов QAbstractTableModel для большого набора данных с помощью HTML / Ajax?

Я пытаюсь показать большую таблицу (список воспроизведения с заголовком, композитор, и т.д ... так что я не могу использовать QListWidget) через QTableView с подклассу QAbstractTableModel. Вызов вы должны переопределить извлечение данных выглядят следующим образом: QVariant данные (Const QModelIndex и индекс, внутр роль = Qt :: DisplayRole) константный; Эта функция вызывается каждый раз для каждой ячейки (задается index.row () & index.colum ()). Воплощение, что 1: 1 к HTML / Ajax даже убить производительность с локальной сетью. Так что мои варианты здесь? Это должно быть возможным, поскольку QSqlQueryModel существует, и они должны иметь такую ​​же проблему. Погуглить для комбинации Ajax / QAbstractTableModel не дал ничего. Есть идеи? PS: Для того, чтобы ответить на полу-я, глядя на QT-Sources Src / SQL / модели / qsqlquerymodel.cpp раскрывает ответ. Это возможно, но я
ewasser
1

голосов
1

ответ
2.5k

Просмотры

PyQt4 Selected Item Text in QTableView delayed by one click

Я использую QTableView, чтобы отобразить содержимое QSqlTableModel наряду с использованием QSortFilterProxyModel для фильтрации записей. В следующем коде я сумел получить выбранный текст, который будет отображаться, когда пользователь нажимает на ячейку (независимо от того, применяется фильтр или нет). Тем не менее, это всегда один клик позади, первый щелчок после запуска вызывает IndexError: поп из пустого списка, и когда новый столбец выбирается в пределах одной строки ничего не происходит. Я попытался выбрать индекс после того, как я инициализировать таблицу, не похоже, чтобы сделать что-нибудь. Я из идей, что попробовать дальше? Класс TableViewer (QtGui.QWidget): self.model = QSqlTableModel () self._proxyModel = QtGui.QSortFilterProxyModel () self._proxyModel.setSourceModel (self.model) self.tv = QTableView () self.tv.setModel (self._proxyModel ) ''»
Steve Lee
1

голосов
1

ответ
5.8k

Просмотры

Qt / QTableView / SQLite, как подключить?

Это мой первый раз программирования Qt. Я сделать адресную книгу на реляционную базу данных для отслеживания вызовов и событий, связанных с лицами и компаниями. Простой самодельный инструмент продаж. Я остро нуждается в ней. Использование Qt Designer Я создал главное окно и поместил виджет QTableView. Установленная SQLite, создана база данных. Теперь мне нужно подключить его к QTableView. Я потратил несколько часов, и до сих пор не могу это сделать. Может кто-то пожалуйста, помогите? Спасибо! Некоторый код: untitled9.pro: # ------------------------------------------ ------- # # Проект создан QtCreator 2012-10-26T14: 35: 12 # # -------------------------- ----------------------- QT + = ядро ​​графического интерфейса QT + = SQL TARGET = untitled9 TEMPLATE = приложение ИСТОЧНИКОВ + = main.cpp \ mainwindow.cpp HEADERS + = mainwindow.h ФОРМЫ + = mainwindow.ui mainwindow.h: #ifndef MAINWINDOW_H #define MAINWINDOW_H # include Пространство имен {Ui класс MainWindow; } Класс MainWindow: общественный QMainWindow {Q_OBJECT общественности: явное MainWindow (QWidget * Родитель = 0); ~ MainWindow (); частные слоты: on_menu_exit_triggered недействительными (); частные: Ui :: MainWindow * щ; }; #endif // MAINWINDOW_H main.cpp: #include #include "mainwindow.h" #include INT основной (интермедиат ARGC, символ * ARGV []) {QApplication а (ARGC, ARGV); MainWindow ж; w.show (); QTableView * Tableview; вернуть a.exec (); } Mainwindow.cpp: #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow :: MainWindow (QWidget * Родитель): QMainWindow (родитель), Ui (новый Ui :: MainWindow) {ui-> setupUi (это) ; } MainWindow :: MainWindow ~ () {удалить пользовательский интерфейс; } Аннулируются MainWindow :: on_menu_exit_triggered () {QCoreApplication :: бросить курить (); } И, есть также длинный XML в mainwindow.ui. Я отправлю его здесь, в случае необходимости. Спасибо!
Michael Zelensky
1

голосов
1

ответ
629

Просмотры

QStyledItemDelegate и QStandardItem предотвращения изменения текста, дают возможность только выбрать и скопировать

У меня есть простой QStandardItem и QTableView и QStyledItemDelegate. У них есть делегаты, я хотел бы, чтобы отключить возможность для пользователя, чтобы изменить содержимое столбца в таблице, и позволяет выбрать только и копировать. Я предполагаю, что это связано с QStyledItemDelegate :: createEditor. Когда я поставил его возвращать 0, это просто отключить все. QWidget * InfoTableItemDelegate :: createEditor (QWidget * Родитель, Const QStyleOptionViewItem & вариант, Const QModelIndex и индекс) сопзЬ {// возвращает QStyledItemDelegate :: createEditor (родитель, опция, индекс); возвращать 0; } Мой вопрос, как я могу определить его так, я могу только выделить и скопировать, и отключить возможность изменить его, как удалить или изменить текст
user63898
1

голосов
1

ответ
1.6k

Просмотры

Как показывают результаты многочисленных выбирает в QTableView с помощью QSqlQueryModel

Я использую следующий подход, чтобы показать результат оператора выбора в QTableView. Как я должен изменить этот код, чтобы показать результат двух или более различных отдельных операторов в том же QTableView? QSqlDatabase дб = QSqlDatabase :: addDatabase ( "QSQLITE"); QString DBPATH = "test1.db"; db.setDatabaseName (DBPATH); QSqlQueryModel * модель = новый CustomSqlModel (); QSqlQuery * запрос = новый QSqlQuery (дБ); query-> подготовить ( "SELECT * FROM MyTable"); query-> Exec (); модели-> SetQuery (* запрос); модели-> setHeaderData (0, Qt :: Horizontal, "Col1"); модели-> setHeaderData (1, Qt :: Horizontal, "Col2"); модели-> setHeaderData (2, Qt :: Horizontal, "Col3"); QTableView * Tableview = новый QTableView (); tableView-> setModel (модель);
Meysam
1

голосов
1

ответ
420

Просмотры

Как нарисовать треугольник в углу ячейки QTableView, чтобы показать можно выбрать из списка данных модели?

Поведение по умолчанию для редактирования ячейки является двойным щелчком, но я хочу, чтобы показать пользователю, что есть список их можно выбрать из, (некоторые из моих колонок имеют только одно значение, и не редактируется), поэтому я открыл настойчивый редактор, но это слишком медленно, если есть слишком много строк. поэтому я обратился к переопределив mousePressEvent и показать выпадающий когда пользователь правой кнопкой мыши на ячейке, но без какого-либо визуального сигнала, чтобы сказать им, какие ячейки могут быть правы щелкнули. (Я знаю, может быть, я могу изменить Б.Г. цвет этой ячейки), но может я чего-то добиться, как это? рисунок черный треугольник в правом нижнем углу цвет ячейки, чтобы указать, что это может быть верно нажал на? как этот образ от первенствует?
Shuman
1

голосов
1

ответ
2k

Просмотры

Change row color of a QTableView with QStandardItemModel

вернуться QtCore.QVariant (QtGui.QColor (QtCore.Qt.red)) возвращает QtGui.QStandardItemModel.data (самостоятельно, индекс, роль) ... И функция для изменения цвета (только строки 1 и 2 для тестирования): Защита changeColor (само, модель): model.setData (model.index (1, 5), 1) model.setData (model.index (2, 5), 2) на данный момент, строки не меняется, когда я немедленно вызвать функция changeColor но изменится, когда я вызываю функцию и прокручивать над QTableView. Я думаю, что я должен излучать сигнал в changeColor, но я не знаю, какой из них. Кроме того, может быть, есть правильный способ сделать это. SetData (model.index (1, 5), 1) model.setData (model.index (2, 5), 2) На данный момент, строки не меняется, когда я немедленно вызвать функцию changeColor, но изменится, когда я называю функция и прокрутки по QTableView. Я думаю, что я должен излучать сигнал в changeColor, но я не знаю, какой из них. Кроме того, может быть, есть правильный способ сделать это. SetData (model.index (1, 5), 1) model.setData (model.index (2, 5), 2) На данный момент, строки не меняется, когда я немедленно вызвать функцию changeColor, но изменится, когда я называю функция и прокрутки по QTableView. Я думаю, что я должен излучать сигнал в changeColor, но я не знаю, какой из них. Кроме того, может быть, есть правильный способ сделать это.
Loïc G.
1

голосов
1

ответ
1.3k

Просмотры

Изменение строки Метка Начать индекс (вертикальный коллектор) в QTableView

При отображении данных, на QTableView, в связи с внутренними причинами, я не могу отобразить первую строку и, следовательно, имею, чтобы скрыть его, используя (qtableobj) -> hideRow (0); Проблема заключается в том, что теперь строки метки начинаются с 2. Как можно запустить индекс от 1, сохраняя при этом первый ряд скрытый? Благодарю.
Barath Ravikumar
1

голосов
1

ответ
1.1k

Просмотры

QTableView :: редактировать (Const QModelIndex и индекс) не

Я пытаюсь предотвратить пользователь вводить одни и те же данные в мою модель, которая наследник QAbstractTableModel. BOOL MyModel :: SetData (Const QModelIndex & индекс, Const QVariant & значение, Int роль) {результат BOOL = ложь; ... // Проверка, если моя модель уже имеет один и тот же результат данных = FindItem (value.toString ()) = -1!; ... если (результат) испускает (dataChanged (индекс, индекс), еще испускает (dataInvalid (индекс)), возвращаемый результат;} Теперь я должен поймать сигнал и превратить мой вид таблицы (какой тип QTableView) вернуться к редактированию состояния : пустота MyWindow :: dataInvalid (Const QModelIndex и индекс) {myTableView-> редактировать (индекс);} Но когда я запускаю мое приложение, я получил сообщение в консоли и QTableView не включается в режиме редактирования состояния: редактирование: править не удалось Что я делаю неправильно? Заранее большое спасибо.
pau
1

голосов
1

ответ
1.2k

Просмотры

как создать замороженную строку нижнего колонтитула в QTableView

Я знаю, что есть подобные вопросы, но ни один из них не имеет решения. Документация Qt определяет это для QAbstractScrollArea :: setViewportMargins (): «. Устанавливает поля вокруг области прокрутки слева, сверху, справа и снизу Это полезно для приложений, таких как электронные таблицы с„запертыми“строками и столбцами маргинального пространства. остается пустым, поместить виджеты в неиспользуемой области Обратите внимание, что эта функция часто вызывается QTreeView и QTableView, поэтому поля должны быть реализованы QAbstractScrollArea подклассов Кроме того, если подклассы, которые будут использоваться в представлениях элементов, они не должны называть это.. функция. По умолчанию все поля равны нулю «. Я был в состоянии создать пространство для замороженных строк, вызывая setViewportMargins, но я не могу понять, как поместить элемент управления в этом пространстве. Кто-нибудь знает как это сделать?
Alex
1

голосов
1

ответ
202

Просмотры

Не удается найти ошибку в определении TextEdit Пункт делегата

Well, the error that appears is the following ...\build-ChequesV2-Desktop_Qt_5_2_1_MinGW_32bit-Debug\debug\texteditdelegate.o:-1: In function `ZN16TextEditDelegateC2EP7QObject': ChequesV2\texteditdelegate.cpp:8: error: undefined reference to `vtable for TextEditDelegate' collect2.exe:-1: error: error: ld returned 1 exit status I have read the code a lot of times, and I can't find where the error is, I have compared it with the codes of other 2 delegates and it seems to be all right. here is the header: #ifndef TEXTEDITDELEGATE_H #define TEXTEDITDELEGATE_H #include class TextEditDelegate : public QStyledItemDelegate { Q_OBJECT public: TextEditDelegate(QObject *parent = 0); QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; void setEditorData(QWidget *editor, const QModelIndex &index) const; void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; }; #endif // TEXTEDITDELEGATE_H And the implementation: #include "texteditdelegate.h" #include #include TextEditDelegate::TextEditDelegate(QObject *parent): QStyledItemDelegate(parent) { } QWidget *TextEditDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex &/* index */) const { QInputDialog *editor = new QInputDialog(parent); editor->setOption(QInputDialog::UsePlainTextEditForTextInput); editor->setInputMode(QInputDialog::TextInput); editor->setLabelText("Ingrese el concepto del cheque"); return editor; } void TextEditDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { QString value = index.model()->data(index, Qt::EditRole).toString(); QInputDialog *inputDialog = static_cast(editor); inputDialog->setTextValue(value); } void TextEditDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { QInputDialog *inputDialog = static_cast(editor); if (!inputDialog) return; model->setData(index, inputDialog->textValue()/*, Qt::EditRole*/); } and here is the call: view = new QTableView; view->setModel(tableProxy); view->setItemDelegateForColumn(COLUMNADECONCEPTO, new TextEditDelegate(view)); Although commenting the last line changes nothing, the error still shows.
user2348235
1

голосов
1

ответ
928

Просмотры

Qt - Triggering an event when selection of abstract item delegate changes

Я пытаюсь сделать TableView с рядом, который имеет отдельный выпадающий список для каждого столбца. Пользователь может выбрать только комбинацию значений. То есть, если пользователь выбирает «A» из первых выпадающего списка, значение в других падениях падения должно быть обновлено, чтобы то, что может соответствовать «A». Я сделал свой AbsractItemDelegate класс и значения присваиваемые в порядке. Но я застрял на том, как я могу вызвать событие, когда значение изменяется в одном из падения капли. Благодарю. Ниже мой делегат реализация класса: FillComboBox :: FillComboBox (QStringList the_list): QItemDelegate () {// Список = новый QStringList (); список = the_list; } QWidget * FillComboBox :: createEditor (QWidget * Родитель, Const QStyleOptionViewItem & / * вариант * /, Const QModelIndex & / * Индекс * /) сопз {QComboBox * Редактор = новый QComboBox (родительский); editor-> AddItems (список); editor-> setCurrentIndex (2); вернуться редактора; } Недействительными FillComboBox :: setEditorData (QWidget * Редактор, Const QModelIndex & индекс) сопзЬ {QString текст = index.model () -> данные (индекс, Qt :: EditRole) .ToString (); QComboBox * combo_box = dynamic_cast (редактор); combo_box-> setCurrentIndex (combo_box-> FindText (текст)); } Недействительными FillComboBox :: setModelData (QWidget * редактор, QAbstractItemModel * модель, Const QModelIndex & индекс) сопзЬ {QComboBox * combo_box = dynamic_cast (редактор); QString текст = combo_box-> currentText (); модели-> УстановитьДанные (индекс, текст, Qt :: EditRole); } Недействительными FillComboBox :: updateEditorGeometry (QWidget * Редактор, Const QStyleOptionViewItem & вариант, Const QModelIndex & / * Индекс * /) сопз {editor-> setGeometry (option.rect); } setEditorData (QWidget * Редактор, Const QModelIndex и индекс) сопзЬ {QString текст = index.model () -> данные (индекс, Qt :: EditRole) .ToString (); QComboBox * combo_box = dynamic_cast (редактор); combo_box-> setCurrentIndex (combo_box-> FindText (текст)); } Недействительными FillComboBox :: setModelData (QWidget * редактор, QAbstractItemModel * модель, Const QModelIndex & индекс) сопзЬ {QComboBox * combo_box = dynamic_cast (редактор); QString текст = combo_box-> currentText (); модели-> УстановитьДанные (индекс, текст, Qt :: EditRole); } Недействительными FillComboBox :: updateEditorGeometry (QWidget * Редактор, Const QStyleOptionViewItem & вариант, Const QModelIndex & / * Индекс * /) сопз {editor-> setGeometry (option.rect); } setEditorData (QWidget * Редактор, Const QModelIndex и индекс) сопзЬ {QString текст = index.model () -> данные (индекс, Qt :: EditRole) .ToString (); QComboBox * combo_box = dynamic_cast (редактор); combo_box-> setCurrentIndex (combo_box-> FindText (текст)); } Недействительными FillComboBox :: setModelData (QWidget * редактор, QAbstractItemModel * модель, Const QModelIndex & индекс) сопзЬ {QComboBox * combo_box = dynamic_cast (редактор); QString текст = combo_box-> currentText (); модели-> УстановитьДанные (индекс, текст, Qt :: EditRole); } Недействительными FillComboBox :: updateEditorGeometry (QWidget * Редактор, Const QStyleOptionViewItem & вариант, Const QModelIndex & / * Индекс * /) сопз {editor-> setGeometry (option.rect); } combo_box-> setCurrentIndex (combo_box-> FindText (текст)); } Недействительными FillComboBox :: setModelData (QWidget * редактор, QAbstractItemModel * модель, Const QModelIndex & индекс) сопзЬ {QComboBox * combo_box = dynamic_cast (редактор); QString текст = combo_box-> currentText (); модели-> УстановитьДанные (индекс, текст, Qt :: EditRole); } Недействительными FillComboBox :: updateEditorGeometry (QWidget * Редактор, Const QStyleOptionViewItem & вариант, Const QModelIndex & / * Индекс * /) сопз {editor-> setGeometry (option.rect); } combo_box-> setCurrentIndex (combo_box-> FindText (текст)); } Недействительными FillComboBox :: setModelData (QWidget * редактор, QAbstractItemModel * модель, Const QModelIndex & индекс) сопзЬ {QComboBox * combo_box = dynamic_cast (редактор); QString текст = combo_box-> currentText (); модели-> УстановитьДанные (индекс, текст, Qt :: EditRole); } Недействительными FillComboBox :: updateEditorGeometry (QWidget * Редактор, Const QStyleOptionViewItem & вариант, Const QModelIndex & / * Индекс * /) сопз {editor-> setGeometry (option.rect); } updateEditorGeometry (QWidget * Редактор, Const QStyleOptionViewItem & вариант, Const QModelIndex & / * индекс * /) сопз {editor-> setGeometry (option.rect); } updateEditorGeometry (QWidget * Редактор, Const QStyleOptionViewItem & вариант, Const QModelIndex & / * индекс * /) сопз {editor-> setGeometry (option.rect); }
jm.
1

голосов
1

ответ
1k

Просмотры

dataChanged сигнал не работает с ComboBoxDelegate

Моя проблема заключается в следующем: Существует QTableViewand QStandardItemModel используется таким образом: ui-> tableView-> setModel (модели); модель-> SetItem (myrow, MyColumn, myQStandardItem); и comboboxdelegate: ComboBoxDelegate * mydelegate = новый ComboBoxDelegate (); ui-> tableView-> setItemDelegateForColumn (MyColumn, mydelegate); Каждый раз, когда значение ячейки таблицы изменяется (по комбо-бокс), мне нужно, чтобы поймать новое значение и индекс ячейки просто modified.I я с помощью dataChaged сигнала, связанного с моделью таким образом: подключить (модель, СИГНАЛ (dataChanged (QModelIndex &, QModelIndex &)), это, SLOT (GetChangedValue (QModelIndex &))); но он не работает, он никогда не вызывает метод GetChangedValue хотя комбо-бокс изменила свое значение. Могу ли я пропустить любой шаг? Здесь под кодом ComboBoxDelegate: Класс ComboBoxDelegate: открытая QStyledItemDelegate {Q_OBJECT общественности: ComboBoxDelegate (QVector & ItemsToCopy, QObject * родитель = 0); ~ ComboBoxDelegate (); недействительный setItemData (QVector & ItemsToCopy); QWidget * createEditor (QWidget * Родитель, Const QStyleOptionViewItem & вариант, Const QModelIndex & индекс) Const; аннулированию сопзЬ setEditorData (QWidget * Редактор, Const QModelIndex & Index); аннулированию сопзЬ setModelData (QWidget * Редактор, QAbstractItemModel * модель, Const QModelIndex & индекс); аннулированию updateEditorGeometry (QWidget * редактор, константный QStyleOptionViewItem & вариант, константный QModelIndex & индекс) сопзЬ; частные: QVector товары; }; ComboBoxDelegate :: ComboBoxDelegate (QVector & ItemsToCopy, QObject * родитель): QStyledItemDelegate (родитель) {setItemData (ItemsToCopy); } ComboBoxDelegate :: ~ ComboBoxDelegate () {} QWidget * ComboBoxDelegate :: createEditor (QWidget * Родитель, Const QStyleOptionViewItem & вариант, Const QModelIndex и индекс) сопзЬ {QComboBox * Редактор = новый QComboBox (родитель); editor-> setEditable (истина); для (INT I = 0; г <Items.size (); ++ я) {editor-> AddItem (Элементы [I]); } Editor-> setStyleSheet ( "выпадающий-Всплывающее: 0;"); вернуться редактора; } Недействительного ComboBoxDelegate :: setEditorData (QWidget * Редактор, Const QModelIndex & индекс) сопзЬ {QComboBox * ComboBox = static_cast (редактор); QString currentText = index.data (Qt :: EditRole) .ToString (); INT cbIndex = comboBox-> FindText (currentText); comboBox-> setCurrentIndex (cbIndex); } Аннулируются ComboBoxDelegate :: setModelData (QWidget * редактор, QAbstractItemModel * модель, Const QModelIndex & индекс) сопзЬ {QComboBox * ComboBox = static_cast (редактор); модели-> УстановитьДанные (индекс, comboBox-> currentText (), Qt :: EditRole); } Недействительного ComboBoxDelegate :: updateEditorGeometry (QWidget * Редактор, Const QStyleOptionViewItem & вариант, Const QModelIndex & / * Индекс * /) сопз {editor-> setGeometry (option.rect); } Недействительного ComboBoxDelegate :: setItemData (QVector & ItemsToCopy) {для (Int строк = 0; строки <ItemsToCopy.size (); ++ строка) {Items.push_back (ItemsToCopy [строка]); }} setItemData (QVector & ItemsToCopy) {для (интермедиат строка = 0; строка <ItemsToCopy.size (); ++ строка) {Items.push_back (ItemsToCopy [строка]); }} setItemData (QVector & ItemsToCopy) {для (интермедиат строка = 0; строка <ItemsToCopy.size (); ++ строка) {Items.push_back (ItemsToCopy [строка]); }}
Programmer_Rox
1

голосов
1

ответ
302

Просмотры

Qt: Как вырастить QTableWidget при рендеринге в случае делегатом краски?

У меня совсем голова. Рассмотрим следующее: У меня есть QListView с настраиваемым делегатом, полученным из QStyledItemDelegate. В краски () событие делегата я использую пользовательский виджет, который я визуализации () в Tableview. Это просто рендеринг Statick, и это нормально, потому что мне нужно только, чтобы показать что-то без взаимодействия. Мой пользовательский виджет содержит QTableWidget вложена в вертикальной компоновке и некоторые другие метки, которые я заполнить данные в sizehint () делегата. Затем я «обновление силы» расположение пользовательского виджета с этой техникой: Qt: Как заставить скрытый виджет вычислить его расположение? - см код forceUpdate (). Все, кажется, действительно хорошо, за исключением одного: tablewidget моего пользовательского виджета, кажется, растет вертикально, когда это необходимо (при добавлении строк в нем), но строки не отображаются !!! Уменьшая это нормально, хотя, устанавливая очень большую высоту для пользовательского виджета как-то исправляет эту проблему, но это не элегантно и просто сообщает о проблеме. Как только оказанной, и, следовательно, не является интерактивным, я не хочу, но я скроллбары нужен QTableWidget сокращаться / расти, чтобы показать дополнительные данные. Не больше, не меньше. GUI пользовательского виджета выполнен с дизайнером, все установлено динамически растет и уменьшается. Где подвох? Кто-нибудь видел такое поведение? Если да, то это сочетание параметров магии? Некоторый код для глаз: QSize ResultsRunDelegate :: sizeHint (Const QStyleOptionViewItem & вариант, Const QModelIndex и индекс) сопзЬ {// обновление данных пользовательского виджета item_widget-> UpdateDisplay (index.row () + 1); forceUpdate (item_widget); // обновление макета возврата item_widget-> sizeHint (); } Пустота ResultsRunDelegate :: краска (QPainter * живописец, Const QStyleOptionViewItem & вариант, Const QModelIndex & индекс) сопзЬ {QPaintDevice * originalPaintDev = малярно> устройство (); если (option.state и QStyle :: State_Selected) малярно> FillRect (option.rect, option.palette.highlight ()); малярно> конец (); forceUpdate (item_widget); item_widget-> визуализации (малярно> устройство (), QPoint (option.rect.x (), option.rect.y ()), QRegion (0, 0, item_widget-> Rect (). ширина () / * item_widget ... -> sizeHint () ширина () * /, / * item_widget-> Rect () высота () * / item_widget-> sizeHint () высота ()), QWidget :: DrawChildren); малярно> начать (originalPaintDev); } Любая помощь будет принята с благодарностью. Thx заранее! Я надеюсь, что вопрос название хорошо, комментарии приветствуются. рисовать (QPainter * живописец, Const QStyleOptionViewItem & вариант, Const QModelIndex & индекс) сопзЬ {QPaintDevice * originalPaintDev = малярно> устройство (); если (option.state и QStyle :: State_Selected) малярно> FillRect (option.rect, option.palette.highlight ()); малярно> конец (); forceUpdate (item_widget); item_widget-> визуализации (малярно> устройство (), QPoint (option.rect.x (), option.rect.y ()), QRegion (0, 0, item_widget-> Rect (). ширина () / * item_widget ... -> sizeHint () ширина () * /, / * item_widget-> Rect () высота () * / item_widget-> sizeHint () высота ()), QWidget :: DrawChildren); малярно> начать (originalPaintDev); } Любая помощь будет принята с благодарностью. Thx заранее! Я надеюсь, что вопрос название хорошо, комментарии приветствуются. рисовать (QPainter * живописец, Const QStyleOptionViewItem & вариант, Const QModelIndex & индекс) сопзЬ {QPaintDevice * originalPaintDev = малярно> устройство (); если (option.state и QStyle :: State_Selected) малярно> FillRect (option.rect, option.palette.highlight ()); малярно> конец (); forceUpdate (item_widget); item_widget-> визуализации (малярно> устройство (), QPoint (option.rect.x (), option.rect.y ()), QRegion (0, 0, item_widget-> Rect (). ширина () / * item_widget ... -> sizeHint () ширина () * /, / * item_widget-> Rect () высота () * / item_widget-> sizeHint () высота ()), QWidget :: DrawChildren); малярно> начать (originalPaintDev); } Любая помощь будет принята с благодарностью. Thx заранее! Я надеюсь, что вопрос название хорошо, комментарии приветствуются. индекс) сопзЬ {QPaintDevice * originalPaintDev = малярно> устройство (); если (option.state и QStyle :: State_Selected) малярно> FillRect (option.rect, option.palette.highlight ()); малярно> конец (); forceUpdate (item_widget); item_widget-> визуализации (малярно> устройство (), QPoint (option.rect.x (), option.rect.y ()), QRegion (0, 0, item_widget-> Rect (). ширина () / * item_widget ... -> sizeHint () ширина () * /, / * item_widget-> Rect () высота () * / item_widget-> sizeHint () высота ()), QWidget :: DrawChildren); малярно> начать (originalPaintDev); } Любая помощь будет принята с благодарностью. Thx заранее! Я надеюсь, что вопрос название хорошо, комментарии приветствуются. индекс) сопзЬ {QPaintDevice * originalPaintDev = малярно> устройство (); если (option.state и QStyle :: State_Selected) малярно> FillRect (option.rect, option.palette.highlight ()); малярно> конец (); forceUpdate (item_widget); item_widget-> визуализации (малярно> устройство (), QPoint (option.rect.x (), option.rect.y ()), QRegion (0, 0, item_widget-> Rect (). ширина () / * item_widget ... -> sizeHint () ширина () * /, / * item_widget-> Rect () высота () * / item_widget-> sizeHint () высота ()), QWidget :: DrawChildren); малярно> начать (originalPaintDev); } Любая помощь будет принята с благодарностью. Thx заранее! Я надеюсь, что вопрос название хорошо, комментарии приветствуются. малярно> конец (); forceUpdate (item_widget); item_widget-> визуализации (малярно> устройство (), QPoint (option.rect.x (), option.rect.y ()), QRegion (0, 0, item_widget-> Rect (). ширина () / * item_widget ... -> sizeHint () ширина () * /, / * item_widget-> Rect () высота () * / item_widget-> sizeHint () высота ()), QWidget :: DrawChildren); малярно> начать (originalPaintDev); } Любая помощь будет принята с благодарностью. Thx заранее! Я надеюсь, что вопрос название хорошо, комментарии приветствуются. малярно> конец (); forceUpdate (item_widget); item_widget-> визуализации (малярно> устройство (), QPoint (option.rect.x (), option.rect.y ()), QRegion (0, 0, item_widget-> Rect (). ширина () / * item_widget ... -> sizeHint () ширина () * /, / * item_widget-> Rect () высота () * / item_widget-> sizeHint () высота ()), QWidget :: DrawChildren); малярно> начать (originalPaintDev); } Любая помощь будет принята с благодарностью. Thx заранее! Я надеюсь, что вопрос название хорошо, комментарии приветствуются. } Любая помощь будет принята с благодарностью. Thx заранее! Я надеюсь, что вопрос название хорошо, комментарии приветствуются. } Любая помощь будет принята с благодарностью. Thx заранее! Я надеюсь, что вопрос название хорошо, комментарии приветствуются.
RDK
1

голосов
2

ответ
746

Просмотры

How to set checked/unchecked multiple selected rows of a QTableView

Я пытаюсь применить принцип, изложенный в следующем посте, но для CheckStateRole моей модели (которая определяется как в данных / методы УстановитьДанных моей модели): как я могу добиться, чтобы обновить несколько строк в QTableView Однако, Я понял, проверка / убрав колонку (в моем случае столбец 0), как представляется, не называть commitData вообще. Вот фрагмент кода: класс MyTableView (QtGui.QTableView): "" "Вид, который установит все выбранные строки в текущем CheckedState. """ Защиту __init __ (я, родитель = None): супер (MyTableView, самость) .__ INIT __ ( родитель) Защита commitData (я, редактор). # этот метод не вызывается, когда пользователь проверяет / неустановленный пункт супер (MyTableView, самость) .commitData (редактор) модель = self.currentIndex () модель () CURRENT_ROW, current_column = self.currentIndex () строка (), значение 0 = model.data (model.index (CURRENT_ROW, current_column), QtCore.Qt.CheckStateRole) для строки в self.selectionModel () selectedRows (0):.., если строка ! = CURRENT_ROW: индекс = model.index (строка, current_column) model.setData (индекс, значение QtCore.Qt.CheckStateRole) Как можно добиться этого для флажков в QTableView с помощью QAbstractTableModel? Внутренне, как обрабатывается CheckBox? Разве это не считается делегатом, который вызывает commitData? Решаемые --------------------------------- Я в конечном итоге обработки этого испуская dataChanged для CheckStateRole от метода SetData в модель, а затем сигнал подключения к способу, который применяется переданные индексы проверить состояние на выбор. Два вопроса возник: Это может привести к бесконечному циклу (dataChanged вызов метода, который повлиял на другие показатели, которые в свою очередь испускают dataChanged ...). Решение было blockSignals при установке выбранных индексов проверить состояние в методе. Из-за blockSignals пользовательский интерфейс не обновляется. Внутренне я предполагаю, что dataChanged вызывает обновление из представления для диапазона индекса. Простое обновление на представлении это исправил. Для загруженных моделей данных, я не уверен, что это лучший подход.
Klaudikus
1

голосов
1

ответ
459

Просмотры

PyQt: QTableView. Фильтр между датами

Я создал графический интерфейс пользователя, который позволяет пользователям изменять, обновлять фильтр и удалить из базы данных SQLite. Все работает прекрасно, за исключением фильтра диапазона дат. Когда я запускаю код, я не получаю сообщение об ошибке, я только получаю пустой отфильтрованный экран без каких-либо данных. Кто-нибудь узнать, что случилось с моим кодом? [Раздел 1а, подгруппа {v} является то, что я ищу помощь на]. Спасибо! от PyQt4 импорта QtCore, QtGui, QtSql импорт SYS импорт sqlite3 время импорт импорт Поиск #imported ui.py импорта MainWindow файл ОС попробовать: от PyQt4.QtCore импорта QString кроме ImportError: QString класс = ул TableEditor (QtGui.QMainWindow, Search.Search_MainWindow) : Защита __init __ (я, TABLENAME, родитель = None): супер (само .__ class__, самость) .__ INIT __ () self.setupUi (сам) self.model = QtSql.QSqlTableModel (сам) self.model.setTable (» текст (), если LEN (текст) == 0: self.model.setFilter ( "") еще: self.model.setFilter ( "Фамилия 'как" + self.search_Lname.text () + "%'") #self .model.setFilter ( «Фамилия =„% s“»% текст) # Эта строка коды будет только тянуть точные совпадения. # [3] Защита search_Unit_FilterRecord (Я): текст = self.search_Unit.text (), если LEN (текст) == 0: self.model.setFilter ( "") еще: self.model.setFilter ( "Unit как" + self.search_Unit.text () + "%") # self.model.setFilter ( "Unit = '% s'" % текст) # Этот строка кода будет только тянуть точные совпадения. # {} II Поле поиска Кнопка Отмена Слоты: # [1] Защиту search_MRN_CancelButton_Clicked (Self): self.model.
Jeremy Stiefel
1

голосов
1

ответ
264

Просмотры

QTableView: интерактивный столбец размер без QHeaderView

У меня есть QTableView со скрытым горизонтальным заголовком table-> horizontalHeader () -> скрыть (); Как вы можете видеть, текст в центральной колонке обрезается из-за ширины столбца. Для просмотра текста, пользователь должен был бы изменить размер столбца, но без заголовка, я не могу это сделать. То, что я хотел бы быть в состоянии сделать это наведите мышь на край колонки и имеют значок нормального изменения размера появляется, а затем позволяют пользователю перетаскивать столбец шире. Это возможно?
Steve Lorimer
1

голосов
1

ответ
26

Просмотры

Запрещает колонки от получения переехал в индекс 0?

Есть ли способ, чтобы позволить QTableView секции (столбцы) быть перераспределены (ака setSectionsMovable (истина)), но запретить какой-либо из столбцов не смещались к индексу 0? Я хотел бы сделать это так, чтобы столбцы могут быть перераспределены путем перетаскивания их, но не позволяет тащили колонки для размещения в самом начале таблицы. Что-то вроде «если тащили индекс столбца назначения равен 0, при отпускании мыши, отменить перетаскивание и ничего не делать.» Это возможно?
earth
1

голосов
1

ответ
45

Просмотры

PyQt QTableView - Захват KeyDown / KeyPress Событие

Я хотел бы, чтобы захватить событие Key вниз на QTableView. Я хотел бы также, чтобы определить, был ли это KeyDown на кнопку DEL, мой QTableView создается как это (от QtCreator): self.tblview_data_sources = QtWidgets.QTableView (self.groupBox_2) self.tblview_data_sources.setGeometry (QtCore.QRect (10 , 20, 721, 121)) self.tblview_data_sources.setObjectName ( «tblview_data_sources») Если это на самом деле DEL-KeyDown Я хотел бы revmove строки, которая выбрана в данный момент. QTableView имеет этот метод keyPressEvent, который нуждается в QKeyEvent - как я могу получить это событие?
Project_Prkt
1

голосов
1

ответ
26

Просмотры

Показать определенные столбцы в QTableView

Предположим, у меня есть QAbstractTableModel, которая кормит 2 QTableView. Один TableView показывает все данные в модели. Пожалуйста, посоветуйте, как я могу подойти, чтобы указать другой TableView, чтобы показать только две колонки из одной и той же модели.
Ahmed Sonbaty
1

голосов
1

ответ
61

Просмотры

Это нормально, чтобы вернуть положительное число строк и нулевых столбцов в QAbstractItemModel?

У меня есть QAbstractItemModel с несколькими строками и столбцами 0. Мы начали использовать класс ModelTest, и он рвется на этой модели. ModelTest состояние документации: Некоторые из условий пойманных включают: HasChildren () возвращает истину, если сверка () больше нуля, то. Вот реализация has_children в Qt 5.11: BOOL QAbstractItemModel :: HasChildren (Const QModelIndex & Родитель) сопзЬ {возвращение (сверку (родитель)> 0) && (ColumnCount (Родитель)> 0); } С этой реализации, мы можем сделать вывод, что если ROWCOUNT возвращает значение больше нуля, ModelTest ожидает ColumnCount возвращать значение больше нуля тоже. С другой стороны: Похоже, что он работает правильно, когда ModelTest не участвует. Это не документировано в HasChildren Это не документированный в ROWCOUNT Это не документированный в ColumnCount Это предотвращает beginRemoveColumn / endRemoveColumns от удаления последнего столбца (когда имеется больше нуля числа строк). Но я предполагаю, что эта модель может быть сброшена в этой ситуации, хотя. Так, в конце которой он: Является ли ModelTest слишком требователен? Могу ли я разбив контракт, который я не в курсе?
Arnaud
1

голосов
1

ответ
47

Просмотры

Qt: Что является противоположностью QAbstractItemView :: NoEditTriggers?

Я хочу, чтобы включить и отключить редактирование виджета QTableView на определенные сигналы. Я могу отключить его: table-> setEditTriggers (QAbstractItemView :: NoEditTriggers); Но как превратить его обратно?
alminko.kasibovic
1

голосов
1

ответ
30

Просмотры

QTableView данные столбцов сортировать по UserRole

У меня есть QStandardItemModel конвейера в QTableView. Один из столбцов в моей модели содержит даты, которые имеют удобные displayData и компьютерно-дружеский USERDATA. Так, например, один QStandardItem может отображать строку, как 22 ноября 2018 года, но данные будут выглядеть 324586 (секунд с начала эпохи). Однако, когда я сортирую столбец его, конечно рода со стороны displayData. Как я могу заставить таблицу сортировать по USERDATA вместо этого?
Spencer
1

голосов
1

ответ
0

Просмотры

QTableView изменить заголовок UserInput имени

Есть ли способ, чтобы изменить заголовок QTableView? Заголовки не жёстко. Они всегда изменяются при загрузке нового файла CSV. Я хотел бы быть в состоянии изменить headears от Doppel щелкнув по нему. Я попытался изменить код с QTableWidget, но там, кажется, что-то не так, becuase мой код выходит с процессом закончил с выходным кодом -1073740791 (0xC0000409) Мой код: импорт SYS из PyQt5 импортных QtWidgets, QtCore, QtPrintSupport, QtGui из PyQt5.QtWidgets импорта * класс main_v2 (QtWidgets.QWidget): Защита __init __ (самостоятельно, родитель = None): супер (main_v2, сам) .__ __ INIT (родитель) self.setGeometry (50, 50, 1100, 850) self.model = QtGui.QStandardItemModel (само) self.tableView = QtWidgets.QTableView (само) # self.tableView.setStyleSheet (таблица стилей (само)) self.tableView.setModel (самостоятельно.
Mady
1

голосов
1

ответ
0

Просмотры

New feature for previous question PySide2 QListView and QTableView

Предыдущий вопрос был этот. EDITED ОБЕСПЕЧИТЬ INFO: Модель представляет собой Dict из dicts, что они могут наследовать другие dicts, кроме пар ключ-значение: dict_of_dicts = { 'dict1': { 'k1': 'v1', 'к2': 'v2', 'k3': 'v3', 'EXISTING_DICT': 'dict2'}, 'dict2': { 'K4': 'v4'}, 'dict3': { 'K5': 'v5', 'k6': 'v6 }} будучи QListView: * dict1 ------ dict2 ----- dict3 и QTableView с dict1 выбранными в QListView: k1 | v1 ------- k2 | v2 ------- k3 | v3 ------- dict2 Есть ли способ сортировки модели с первой унаследованной dicts на вершине, а затем элементами Dict? dict2 ------- k1 | v1 ------- k2 | v2 ------- k3 | v3 А если ввести новые элементы в лета (у меня есть способ ввести новые элементы в интерфейсе), это упорядочиваются независимо от заказа? Я играл с QStandardItemModel рода и setSortRole (Qt.CheckStateRole)
eddy2k
1

голосов
1

ответ
0

Просмотры

Один QStandardItemModel для различных QTableView, Generic против конкретных Просмотров

Я действительно не знаю, если это имеет смысл, но это то, что я пытаюсь сделать: я делаю редактор моей игры в QT. В настоящее время я использую QStandardItemModel хранить все мои детали сцены. Эти элементы имеют имена, положение, текстуры (вектор текстуры, который является пользовательским классом), анимация (вектор анимации) и т.д. Я считаю, что полезно иметь один элемент для строки, потому что я могу добавить или удалить эти элементы легко помимо того, что их в одном месте, чтобы изменить эту модель должна влиять на все приложения. Теперь я пытаюсь сделать определенные взгляды на говорят «Textures» определенный элемент. Это QTableView должен показать имя текстуры, в пути и т.д. Таким образом, в основном, как я могу захватить вектор текстуры в общей модели и заполнить еще один вид, не делая другую модель?
Alberto Toglia
1

голосов
1

ответ
0

Просмотры

Qt4 Model / View - Преобразование данных в View?

Вот мой случай использования (очень упрощенно). У меня есть некоторые данные из БД в QSqlTableModel и мне нужно, чтобы преобразовать его: объединить несколько полей в одно (и дисплей как таковой) или разделить одно поле в несколько. Как и где это должно быть сделано в Model / View? Примечания: Я попытался с помощью AbstractProxyModel, чтобы сделать это, но я думаю, что это подходит только для фильтрации или сортировки. Я мог бы выделить новые данные и вернуть QModelIndex (который несет указатель на данные), но какой объект должен освободить данные позже? Модификация объекта View также не поможет, так как он обрабатывает каждую ячейку таблицы отдельно. Имейте в виду, что я не могу изменить базу данных в любом случае. Как это сделать в Qt? Я уже потратить целых два дня на это только бежать в одну стену за другой.
kurczak
1

голосов
2

ответ
0

Просмотры

PyQt: QStyledItemDelegate в QTableView на Windows Vista / 7?

Я хотел бы получить / ряд клеток, чтобы посмотреть, как это в QTableView: При запуске Ubuntu, то QStyledItemDelegate работает для обоих QTreeView и QTableView, но на Windows, он работает только на QTreeView, и только тогда, когда я не переописать метод краски. Так что мои 2 вопроса: Как я могу получить QStyledItemDelegate выглядеть как на картинке выше в QTableView? Как я могу получить QStyledItemDelegate выглядеть как на картинке выше при переопределении краски? Изображение рядом с текстом это не обязательно. Я просто смотрю на стилизованное парение и поле выбора. Только в случае, если это необходимо, моя Qt версии 4.7.2.
D K
1

голосов
1

ответ
0

Просмотры

QStandardItem преобразует беззнаковое Int в Int после редактирования

Я создаю QTableView с QStandardItemModel, после редактирования QStandardItem типа изменяется от знака междунара в целое. Такое поведение только случается без знака междунар и только когда пользователь редактирует его, другие типы данных остаться. window.cpp #include "window.h" #include "ui_window.h" #include #include #include Window :: Window (QWidget * Родитель): QMainWindow (родитель), Ui (новый Ui :: Window) {ui-> setupUi (это); QTableView * tblview = новый QTableView (это); Модель = новый QStandardItemModel (0,0); tblview-> setModel (модель); QStandardItem * данные = новый QStandardItem; данных-> setEditable (истина); данных-> SetData (QVariant ((UINT) 1), Qt :: DisplayRole); модель-> SetItem (0, 0, данные); tblview-> показать (); QModelIndex индекс = модель-> индекс (0, 0, QModelIndex ()); tblview-> setGeometry (0,0, 200200); // результат QVariant (UINT, 1) QDebug () данные (индекс); подключения (модель, SIGNAL (itemChanged (QStandardItem *)), это, SLOT (dataChanged (QStandardItem *))); } Window :: ~ Window () {удалить пользовательский интерфейс; } Аннулируются Window :: dataChanged (QStandardItem * stditem) {// результат // QVariant (интермедиат, 3) // ожидаемый результат // QVariant (UINT, 3) QDebug () данные (stditem-> индекс ()); } Window.h #ifndef WINDOW_H #define WINDOW_H # include # include Пространство имен {Ui класс окна; } Класс Window: общественный QMainWindow {Q_OBJECT общественности: явное окно (QWidget * Родитель = 0); ~ Окно (); частные: Ui :: Window * щ; QStandardItemModel * модель; частные слоты: аннулируются dataChanged (QStandardItem *); }; #endif // WINDOW_H СИГНАЛ (itemChanged (QStandardItem *)), то это, SLOT (dataChanged (QStandardItem *))); } Window :: ~ Window () {удалить пользовательский интерфейс; } Аннулируются Window :: dataChanged (QStandardItem * stditem) {// результат // QVariant (интермедиат, 3) // ожидаемый результат // QVariant (UINT, 3) QDebug () данные (stditem-> индекс ()); } Window.h #ifndef WINDOW_H #define WINDOW_H # include # include Пространство имен {Ui класс окна; } Класс Window: общественный QMainWindow {Q_OBJECT общественности: явное окно (QWidget * Родитель = 0); ~ Окно (); частные: Ui :: Window * щ; QStandardItemModel * модель; частные слоты: аннулируются dataChanged (QStandardItem *); }; #endif // WINDOW_H СИГНАЛ (itemChanged (QStandardItem *)), то это, SLOT (dataChanged (QStandardItem *))); } Window :: ~ Window () {удалить пользовательский интерфейс; } Аннулируются Window :: dataChanged (QStandardItem * stditem) {// результат // QVariant (интермедиат, 3) // ожидаемый результат // QVariant (UINT, 3) QDebug () данные (stditem-> индекс ()); } Window.h #ifndef WINDOW_H #define WINDOW_H # include # include Пространство имен {Ui класс окна; } Класс Window: общественный QMainWindow {Q_OBJECT общественности: явное окно (QWidget * Родитель = 0); ~ Окно (); частные: Ui :: Window * щ; QStandardItemModel * модель; частные слоты: аннулируются dataChanged (QStandardItem *); }; #endif // WINDOW_H 3) // ожидаемый результат // QVariant (UINT, 3) QDebug () данные (stditem-> индекс ()); } Window.h #ifndef WINDOW_H #define WINDOW_H # include # include Пространство имен {Ui класс окна; } Класс Window: общественный QMainWindow {Q_OBJECT общественности: явное окно (QWidget * Родитель = 0); ~ Окно (); частные: Ui :: Window * щ; QStandardItemModel * модель; частные слоты: аннулируются dataChanged (QStandardItem *); }; #endif // WINDOW_H 3) // ожидаемый результат // QVariant (UINT, 3) QDebug () данные (stditem-> индекс ()); } Window.h #ifndef WINDOW_H #define WINDOW_H # include # include Пространство имен {Ui класс окна; } Класс Window: общественный QMainWindow {Q_OBJECT общественности: явное окно (QWidget * Родитель = 0); ~ Окно (); частные: Ui :: Window * щ; QStandardItemModel * модель; частные слоты: аннулируются dataChanged (QStandardItem *); }; #endif // WINDOW_H
nfo
1

голосов
4

ответ
0

Просмотры

QTableView mouseRelease event not called when drag ends, bug?

I would simply like to catch the mouseRelease event when a user drags an item from a QTableView and releases the left button. I want to highlight possible dropping zones in my app, like changing the background of a widget. I start by detecting the drag-start by re-implementing: void LibraryTableView::startDrag( Qt::DropActions supportedActions ) { m_dragReleased = false; emit dragStart(); QTableView::startDrag(supportedActions); } and emitting my own signal. Now that the dropzone has changed, I need to catch the release event to redraw the dropzone as before whether the drag and drop succeded or not ! I tried different models, reimplementing the 4 mouse events and eventFilter, but the Mouse Release Event is never catched. Here is my code: void LibraryTableView::mouseDoubleClickEvent( QMouseEvent* event ) { QTableView::mouseDoubleClickEvent(event); } void LibraryTableView::mouseMoveEvent( QMouseEvent* event ) { qDebug()
Kikohs
1

голосов
1

ответ
1.1k

Просмотры

how to edit specific item in qtableview?

Есть ли способ, чтобы изменить конкретный пункт в QTableView данной строки и столбец значение? Например, я хочу, чтобы увеличить свою ценность каждую секунду. Вот мой TableModel. Благодаря класс MyTableModel (QAbstractTableModel): Защита __init __ (самостоятельно, DATAIN, headerdata, родитель = None, * арг): "" "DATAIN: список списков headerdata: список строк """ QAbstractTableModel .__ INIT __ (я, родитель, * арг) self.arraydata = DATAIN self.headerdata = headerdata защиту ROWCOUNT (я, родитель): возвращает Len (self.arraydata) защиту ColumnCount (я, родитель): попробуйте: вернуть LEN (self.arraydata [0]), за исключением: возвращать 0 защиту данных (самость, индекс, роль): если не index.isValid (!): вернуться QVariant () Элиф роль = Qt.DisplayRole:
unice
1

голосов
1

ответ
764

Просмотры

PyQt4 setItemDelegateForRow вызывает ошибки сегментации

Я пытаюсь установить редактор делегат на моем QTableView специфичны для каждой строки данных с помощью метода QTableView.setItemDelegateForRow (). Когда я установил делегат на нескольких строках, что приводит к PyQt4 сегментации вины. Кажется, по крайней мере, частично связано с использованием той же переменной для хранения различных экземпляров класса делегата, например, так: # Этот код вызывает делегат ошибки сегментации = ListDelegate (choices0) tableView.setItemDelegateForRow (0, делегат) делегат = ListDelegate (choices1) tableView.setItemDelegateForRow (1, делегат) Тем не менее, если я использую различные переменные, кажется, работает должным образом, например: # Этот код работает, чтобы установить делегат по ряду delegate0 = ListDelegate (choices0) tableView.setItemDelegateForRow (0, delegate0) delegate1 = ListDelegate (choices1) tableView.setItemDelegateForRow (1, delegate1) У меня есть пример кода, который вызывает ошибку сегментации, которую я буду включать в конце. Я проверил это на Python 2.7 как на Ubuntu Linux и Windows 7, как 64-бит. Я понимаю, что быстрое решение будет просто использовать раздельные переменные, но в моей реальной программе (это не пример кода) Я пытаюсь установить делегат в цикле, и с помощью словаря или список для хранения делегатов не кажется, решить эту проблему. Пример приложение: от импорта PyQt4 QtGui, QtCore класса импорта SYS PaletteListModel (QtCore.QAbstractListModel): __init четкости __ (самостоятельно, цвет = [], родитель = None): QtCore.QAbstractListModel .__ Инициализационных __ (я, родитель) самостоятельно .__ цвет = цвет # требуется метод для модели класса четкости ROWCOUNT (я, родитель): возвращение LEN (я. __colors) # необязательный метод класса Model четкости headerData (я, раздел, ориентации, роль): если роль == QtCore.Qt.DisplayRole: если ориентация == QtCore.Qt.Horizontal: возвращение QtCore.QString ( "Палитра") еще : возвращение QtCore.QString ( "Color% 1") Arg (раздел), если роль == QtCore.Qt.ToolTipRole. А если ориентация == QtCore.Qt.Horizontal: возвращение QtCore.QString ( "горизонтального заголовок% S Tooltip" % ул (раздел)) еще: вернуть QtCore.QString ( «вертикального водосборник% S подсказки»% ули (раздел)) # требуется метод для данных класса Model четкости (самостей, индекса, роль): # индекс содержит объект QIndexClass. Объект имеет следующие методы #: строку (столбец), (), dataChanged.emit (индекс, индекс) Возвращает True, возвращает False # implment флаги () метод Защита флаги (самоповреждения, индекс): возвращение QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable класса ListDelegate (QtGui.QStyledItemDelegate): Защита __init __ (самоповреждения, цвет = QtCore.QStringList (), родитель = None): #super (ListDelegate, самость) .__ INIT __ () QtGui.QStyledItemDelegate .__ INIT __ (я, родитель) самостоятельно .__ цвет = цвет #self .__ ток = ток Защита createEditor (я, родитель, опция, индекс): изд = QtGui.QComboBox (родитель) ed.setEditable (True) # добавить каждый параметр настройки в выпадающий список для с в самостоятельно .__ цвета: ed.addItem (s) возвращает редактор, если __name__ == '__main__': приложение = QtGui.QApplication (sys.argv) приложение.
freakinhippie
1

голосов
1

ответ
2.5k

Просмотры

QTableView не расширяется / уменьшения при изменении размеров QMainWindow

У меня есть QMainWindow. Внутри QMainWindow, у меня есть центральный виджет. Для центрального виджета, у меня есть QVBoxLayout. Для этого QVBoxLayout я добавил 3 виджетов. Один виджет с некоторыми лейблами, который имеет QGridLayout. Другой представляет собой горизонтальную линию. Третий является QTableView. Проблема заключается в том, что, когда я пытаюсь расширить QMainWwindow, несмотря на то, что изменение размера политики я установить (или нет), TableView не расширяется, и это оставляет недопустимую пустую область, в остальной части расширенной QMainWindow. Может кто-нибудь сказать мне, как я могу сделать таблицу расширения / изменения размеров при изменении размеров окна. Вот соответствующий код. `StatInfoWidget = новый Static_Info (TagN); QWidget * виджет = новый QWidget; setCentralWidget (виджет); QFrame * hor_line = новый QFrame (); hor_line-> setFrameShape (QFrame :: HLine); QVBoxLayout * макет = новый QVBoxLayout (); layout-> setMargin (2); layout-> addWidget (statInfoWidget); layout-> addWidget (hor_line); Таблица = новый QTableView (это); Темп = Таблица; т = новый TableLayout (statInfoWidget); Таблица-> setModel (т); Таблица-> verticalHeader () -> скрыть (); Таблица-> horizontalHeader () -> скрыть (); Таблица-> setShowGrid (ложь); Таблица-> setContextMenuPolicy (Qt :: CustomContextMenu); // Таблица-> setColumnWidth (2290); // Таблица-> setColumnWidth (0,25); // если (num_version == 1) // Таблица-> setColumnWidth (1,0); // иначе // Таблица-> setColumnWidth (1,43); // Таблица-> setColumnWidth (3210); // Таблица-> setColumnWidth (4170); // Таблица-> setColumnWidth (5,50); statInfoWidget-> setStyleSheet ( "фон: RGB (153185193); цвет: RGB (0,0,0); семейство шрифтов: Tahoma; размер шрифта: 19px; границы: 0px боковик RGB (255255255); линия сетки цвет: # 669933;»" 193); цвет: RGB (0,0,0); семейство шрифтов: Tahoma; размер шрифта: 15px; начертание шрифта: жирный; границы: 0px боковик RGB (255,255,255); линия сетки цвет: # 669933;»«Выбор-фонового цвета: QLinearGradient (x1: 0, y 1: 0, х2: 0, у2: 1, остановка: 0 прозрачный, остановка: 1 белый); "); // layout-> addWidget (Button1); QSizePolicy политика = Таблица-> sizePolicy (); policy.setVerticalStretch (1); policy.setHorizontalStretch (1); Таблица-> setSizePolicy (политика); layout- > addWidget (таблица); widget-> setLayout (макет); ` 193); цвет: RGB (0,0,0); семейство шрифтов: Tahoma; размер шрифта: 15px; начертание шрифта: жирный; границы: 0px боковик RGB (255,255,255); линия сетки цвет: # 669933;»«Выбор-фонового цвета: QLinearGradient (x1: 0, y 1: 0, х2: 0, у2: 1, остановка: 0 прозрачный, остановка: 1 белый); "); // layout-> addWidget (Button1); QSizePolicy политика = Таблица-> sizePolicy (); policy.setVerticalStretch (1); policy.setHorizontalStretch (1); Таблица-> setSizePolicy (политика); layout- > addWidget (таблица); widget-> setLayout (макет); ` QSizePolicy политика = Таблица-> sizePolicy (); policy.setVerticalStretch (1); policy.setHorizontalStretch (1); Таблица-> setSizePolicy (политика); layout-> addWidget (таблица); widget-> setLayout (макет); ` QSizePolicy политика = Таблица-> sizePolicy (); policy.setVerticalStretch (1); policy.setHorizontalStretch (1); Таблица-> setSizePolicy (политика); layout-> addWidget (таблица); widget-> setLayout (макет); `
user1173240

Просмотр дополнительных вопросов

Связанные вопросы