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

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

голосов
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

ответ
3.3k

Просмотры

Наследование QAbstractTableModel

Я подклассы в QAbstractTableModel представлять данные из QMap. Это QMap имеет QLists из QSqlRecords и эта карта изменяется какой-либо другой части моего кода. Я хочу использовать эту модель с QTableView для отображения SQL записей в этой карте для каждого ключа. Вот мой код. //mymodel.h класс MyModel: общественный QAbstractTableModel {Q_OBJECT общественности: MyModel (QObject * родитель = 0); INT ROWCOUNT (Const QModelIndex & родитель = QModelIndex) () Const; INT ColumnCount (Const QModelIndex & родитель = QModelIndex) () Const; QVariant данные (Const QModelIndex & индекс, Int роль) константный; недействительный setRecordMap (QMap * карта); недействительный setSelectedSerMsgIndex (QModelIndex * индекс); частные: QMap * recordMap; QModelIndex * selectedSerendibMsgIndex; }; //mymodel.cpp MyModel :: MyModel (QObject * родитель): QAbstractTableModel (родитель) {} INT MyModel :: ROWCOUNT (Const QModelIndex & родитель) сопзЬ {если (recordMap-> IsEmpty ()) возвращает 0; INT = строка selectedSerendibMsgIndex-> ​​строка (); вернуть recordMap-> значения (строка) .size (); } INT MyModel :: ColumnCount (Const QModelIndex & Родитель) сопзЬ {если (recordMap-> IsEmpty ()) возвращает 0; INT = строка selectedSerendibMsgIndex-> ​​строка (); вернуть recordMap-> значение (строка) .at (0) .count (); } QVariant MyModel :: данные (Const QModelIndex и индекс, внутр роль) сопзЬ {если (recordMap-> IsEmpty ()) возвращают QVariant (); (! Index.isValid ()), если вернуться QVariant (); INT = строка selectedSerendibMsgIndex-> ​​строка (); если (index.row ()> = recordMap-> значение (строка) .size ()) возвращают QVariant (); если (роль == Qt :: DisplayRole) {вернуть recordMap-> значение (строка) .value (index.row ()) значение (index.column ()). / * QVariant ( "привет"); * /} еще {вернуть QVariant (); }} Пустот MyModel :: setRecordMap (QMap * Карта) {recordMap = отображение; } Недействительными MyModel :: setSelectedSerMsgIndex (QModelIndex * индекс) {selectedSerendibMsgIndex = индекс; } Извините за огромный пост. Но проблема в том, что я не могу видеть данные с карты. Я предполагаю, что это потому, что что-то не так с моей реализацией данных (методом). Но я не могу понять, что это такое. Пожалуйста, будьте любезны, чтобы помочь мне. Спасибо. Я предполагаю, что это потому, что что-то не так с моей реализацией данных (методом). Но я не могу понять, что это такое. Пожалуйста, будьте любезны, чтобы помочь мне. Спасибо. Я предполагаю, что это потому, что что-то не так с моей реализацией данных (методом). Но я не могу понять, что это такое. Пожалуйста, будьте любезны, чтобы помочь мне. Спасибо.
kasper360
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

ответ
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

ответ
26

Просмотры

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

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

голосов
2

ответ
0

Просмотры

Как обновить QSqlTableModel после подключения к базе данных было изменено измененным

У меня есть класс, который является производным от QSqlRelationalTableModel. Я использую SQLite базы данных. И мне нужно изменить файл базы данных. Я закрываю старый файл базы данных, вызовите SetDatabaseName ( «путь к новому файлу») и открыть новый файл базы данных. Теперь я просто называю выбор () для модели, но она возвращает ложь. И если я называю Устанавливаемое ( «стол»), и только после этого выберите (), все работает ... Но имя таблицы одно и то же ... Я не нашел какой-либо метод, который позволяет информировать модель, подключение к базе данных был изменен .... вы знаете лучший способ сообщить модель? Хорошо. Я вернулся к этой теме еще раз. После того, как БД изменен Я должен позвонить Устанавливаемому () с тем же именем таблицы для переинициализации таблицы модели. И я не нашел лучший способ, как REINIT вида таблицы, со я называю pTableView-> setModel (NULL); pTableView-> setModel (модель); Это порождает много ненужных вызовов с кодом, но в другом случае зрения таблицы не знает об изменениях в таблице модели (для подсчитывать пример столбцов). Я не нашел лучший способ переинициализировать QSqlTableModel и QTableView. Некоторые идеи?
Funt
1

голосов
1

ответ
132

Просмотры

Сортировка случай нечувствительно в QAbstractItemModel

У меня есть проблемы с пытаюсь создать свою собственную функцию сортировки с QAbstractItemModel. Это работает, но не чувствительно к регистру. Я пытался использовать QSortFilterProxyModel, но любой успех. Моя функция сортировки: Защита сортировки (я, цв, порядок): self.emit (SIGNAL ( "layoutAboutToBeChanged ()")) self.tableData = отсортировано (self.tableData, ключ = operator.itemgetter (Col)) если заказ == Qt.AscendingOrder: self.tableData.reverse () self.emit (SIGNAL ( "layoutChanged ()")) Я использую QTableView. Как я мог бы сделать это чувствительно к регистру? Полный пример: от PyQt4.QtCore импорта * из PyQt4.QtGui импорта * оператор импорта импорта SYS класса Window (QWidget): Защита __init __ (Я): супер (Window, самость) .__ INIT __ () заголовок = [ "один", «два "] tableDict = [[" ABCDEF», "tuvwx"], [ "ABCDE"
Dave
1

голосов
1

ответ
24

Просмотры

PyQt5 TableModel (QAbstractTableModel) не показывает никаких данных

Здравствуйте я начал с PyQt5 недавно и попытался реализовать CSV парсер: Но я боролся с потомком QAbstractTableModel. Нет данных в представлении! Учебник от qt5 (https://doc.qt.io/qt-5/qabstracttablemodel.html) говорит, что я должен реализовать некоторые методы в TableModel - класс. Я думаю, что я не сделал это, но - никаких данных в представлении. от PyQt5.QtWidgets импорта \ QApplication, QWidget, QVBoxLayout, QTableView из PyQt5.QtCore импорта \ QAbstractTableModel, QVariant, Qt класса TableModel (QAbstractTableModel): __ __init четкости (Self): супер () .__ INIT __ () self._data = [] Защиту комплект (самостоятельно, данные): self._data = данные четкости ROWCOUNT (я, индекс): возвращает Len (self._data) Защиты ColumnCount (сам, индекс): возвращает Len (self._data [0]) Защита данных (Self, индекс, роль = Qt.DisplayRole): если не индексировать.
jgsedi
1

голосов
1

ответ
2.9k

Просмотры

Changing QAbstractTableModel headerData using the role

У меня есть класс подкласс TableModel: общественный QAbstractTableModel я переопределить метод headerData следующим образом: QVariant TableModel :: headerData (Int раздел, Qt :: Ориентация ориентации, внутр роль) константный {если (роль == Qt :: DisplayRole && ориентацию == Qt :: Horizontal) {...} если (роль == TableModel :: CurrencyRole && ориентация == Qt :: Horizontal) {...} вернуться QVariant (); } У меня есть метод, который установлен в QTableView, как следовать за использованием TableModel * Таблица пустот A :: SetDisplay (QTableView * table_view, QString фильтр, Int, Int роль sort_role) {proxyModel = новый QSortFilterProxyModel (этот); proxyModel-> setSourceModel (таблица); proxyModel-> setDynamicSortFilter (истина); proxyModel-> setSortRole (sort_role); table_view-> setModel (proxyModel); table_view-> setSortingEnabled (истина); table_view-> setSelectionBehavior (QAbstractItemView :: SelectRows); table_view-> horizontalHeader () -> setStretchLastSection (истина); table_view-> verticalHeader () -> скрыть (); table_view-> setEditTriggers (QAbstractItemView :: NoEditTriggers); table_view-> setSelectionMode (QAbstractItemView :: SingleSelection); proxyModel-> setFilterRegExp (QRegExp (фильтр, Qt :: CaseInsensitive)); proxyModel-> setFilterKeyColumn (1); proxyModel-> сортировки (0, Qt :: AscendingOrder); подключения (table_view-> selectionModel (), SIGNAL (SelectionChanged (QItemSelection, QItemSelection)), это, SIGNAL (SelectionChanged (QItemSelection))); } У меня есть два объекта QTableView ViewA и viewB. Мне нужно ViewA иметь заголовок с ролью == Qt :: DisplayRole и viewB иметь заголовок с ролью == TableModel :: CurrencyRole. Как я могу получить headerData изменить для каждого вида, используя роль. Спасибо, и, пожалуйста, дайте мне знать, если я оставил какую-либо деталь из или или что-то неясно, в моем вопросе.
andre
1

голосов
1

ответ
3.3k

Просмотры

QTableView, кажется, не реагирует на сигнал dataChanged

Ниже показана модель моей настраиваемой таблицы. Я пытаюсь использовать это TableModel вместе с QTableView. Если метод Append модели таблицы называется я ожидал бы вид таблицы, чтобы обновить его содержимое. Но это не делает, и я не знаю, почему. Если же я использую эту же модель таблицы вместе с QListView, все работает отлично, то есть в виде списка действительно обновить его содержимое, если добавить в модель таблицы вызывается. Есть ли что-то особенное, что нужно сделать в случае QTableView? класс MyModel: общественный QAbstractTableModel {общественности: MyModel (QObject * родитель = NULL): QAbstractTableModel (родитель) {} ИНТ ROWCOUNT (Const QModelIndex & Родитель = QModelIndex ()) сопзЬ {вернуть mData.size (); } Int ColumnCount (константный QModelIndex & родительский = QModelIndex ()) {сопзЬ возвращение 2; } данных QVariant (Const QModelIndex и индекс, внутр роль = Qt :: DisplayRole) сопзЬ {{если вернуться QVariant () (index.isValid (!)); } Если (роль == Qt :: DisplayRole) {если (index.column () == 0) {вернуть QVariant (QString :: fromStdString (GetFirst (index.row ()))); } Если (index.column () == 1) {вернуть QVariant (QString :: fromStdString (getSecond (index.row ()))); }} Вернуть QVariant (); } Недействительной Append (станд :: строка Const & первая, станд :: строка Const и вторая) {mData.push_back (станд :: make_pair (первый, второй)); испускают dataChanged (индекс (mData.size () - 1, 0), индекс (mData.size () - 1, 1)); } Станд :: строка Const & GetFirst (интермедиат я) сопзЬ {вернуть mData [I] .first; } Станд :: строка сопзЬ & getSecond (интермедиат я) сопзЬ {вернуть mData [I] .second; } Защищены: станд :: вектор mData; };
Christian
1

голосов
1

ответ
1.5k

Просмотры

QAbstractTableModel retrieve custom object on data changed

I have recently picked up Qt again, and started refreshing my memory. Creating a custom data model for a table was easy enough. Now I am trying to retrieve the selected data. Take note that I use custom data objects. Example of my custom model: platform.h class Platform { public: Platform(); Platform(QString name); QString getName(); void setName(QString name); private: QString m_name; }; Very simple data structure for testing purposes. I then implemented a QAbstractTableModel, the Data() method looks like this: platformmodel.cpp QVariant PlatformModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); if (index.row() >= m_platforms.size() || index.row() < 0) return QVariant(); if (role == Qt::DisplayRole) { Platform platform = m_platforms.at(index.row()); qDebug() lvPlatforms->selectionModel()->currentIndex(); Platform selectedPlatform = index.data();//This returns a QVariant and will fail at compile time, but I want to achieve something along this line. setWindowTitle(selectedPlatform.getName()); } P.s. Maybe I am trying to search on the wrong thing, I can find examples that use custom objects, but none talk about retrieving the selected item. There has to be a better way then retreiving the string, then looping trough the list of platforms and comparing the name to the selected item.. If i have a big list, having to loop trough each item and do string comparison is not very efficient. I hope my problem is clear enough. If something important lacks, let me know so I can edit my example. EDIT I tried Q_DECLARE_METATYPE(Platform); And yes it works, it makes it possible to store it in a QVariant, the problem is, since for displaying, a String is always expected, or 9/10 times anyway. So far it seems impossible to have both text display AND get the full platform object from the selection model(i can do both individually.. pretty useless..)
Joey Roosing
1

голосов
1

ответ
1k

Просмотры

Почему с помощью QAbstractTableModel вместо QAbstractListModel?

Я реализовал TableView в QML с помощью TableViewColumns с некоторыми ролями, как это: TableView {TableViewColumn {роль: «role1» название: «Role1»} ...} Это связано с C ++ модели, унаследованные от QAbstractListModel с определены все роли и Я считаю, это вполне естественно. Тем не менее, я обнаружил, что существует также QAbstractTableModel, что позволяет использовать индексы столбцов. Я понял, что я должен был, вероятно, использовал его, но я предпочитаю роли индексов столбцов. Может кто-то пожалуйста, объясните, что такое преимущество использования QAbstractTableModel?
Werolik
2

голосов
2

ответ
2.4k

Просмотры

Qt5 QTreeView with custom model and large data very slow scrolling

У меня есть пользовательские данные, которые мне нужно отобразить в QTreeView. Я вывел свою модель из QAbstractTableModel, и сделал свои собственные реализации ROWCOUNT (), ColumnCount (), данные (), и headerData (). Модель имеет локальный QList>, чтобы поддержать его, и функции данных () определяется для чтения значений из этого списка списков непосредственно соответствующих строки и столбца, полученной в параметре QModelIndex. Есть два вопроса, я бегу в. Первое, что нагрузка очень большой файл довольно медленно, что вполне понятно. Во-вторых, действие прокрутки мучительно медленно, что я на самом деле не понимая. Оказывается, что если я тяну свитка ручку вниз, графический интерфейс висит около 20 секунд, а затем выскакивает обратно. Если я тяну ручку на большее расстояние вниз, повесьте время соответственно увеличивается. Если я тяну ручку на всем пути к нижней части полосы прокрутки, после ожидания для приложения, чтобы стать отзывчивыми снова, я могу потянуть ручку вверх и вниз и получить гораздо лучший ответ. Мне кажется, что QTreeView просит лишь небольшой кусок имеющихся данных, но когда я вытащил свиток обрабатывать весь путь до нижней части полосы прокрутки, когда приложение снова становится отзывчивым, он имеет к этому моменту чтение все данные. Есть ли способ программирования для более оперативной работы с прокруткой для больших объемов данных? Я не возражаю больше ждать впереди, так что просто что-то подобное принуждения мнения, чтобы прочитать все данные от модели до передней будет работать. Кроме того, я думал, что я мог бы вернуться только вытекающие из QAbstractItemView и контроля, как она запрашивает и хранит данные, позволяющие только для хранения просматриваемых данных, плюс буфер записи до и после просматриваемых данных. Это, конечно, означало бы, я должен был бы контролировать полосу прокрутки, так как ручка проклейки будет указывать на небольшое количество данных, и я хотел бы, чтобы она выглядела пользователю, как это должно быть для размера данных, которые они имеют дело с. Не действительно хочет пойти туда, если я не должен.
bmahf
1

голосов
2

ответ
1k

Просмотры

Using a QCompleter in a QTableView with Qt and Python

Я читал на том, как сделать мое QAbstractTableModel редактируемым, и это выглядит довольно просто. Но как настроить изменяемую ячейку, чтобы использовать QCompleter? Я принимаю это как-то я должен сказать QTableView, чтобы использовать QLineEdit виджет? Как я могу это сделать? Редактирование: хмм, я предполагаю, что это что-то с QTableView.setItemDelegateForColumn (), но я ничего о делегатов или как использовать их не знаю. Редактирование: Я пробовал решение RobbieE, в что-то, что-то работает, но он получает геометрию со списка всплывающего неправильно и врежется Python, когда я нажимаю Enter. Класс CompleterDelegate (QtGui.QStyledItemDelegate): Защита __init __ (я, родитель = None, completerSetupFunction = None): супер (CompleterDelegate, самость) .__ INIT __ (родитель) self._completerSetupFunction = completerSetupFunction Защита createEditor (я, родитель, опция, индекс):
Jason S
7

голосов
3

ответ
12.6k

Просмотры

Qt Удалить выбранную строку в QTableView

Я хочу, чтобы удалить выбранную строку из таблицы, когда я нажимаю на кнопку удаления. Но я не могу найти ничего о удалении строк в документации Qt. Есть идеи?
laura
2

голосов
2

ответ
569

Просмотры

Используйте реализацию QAbstractTableModel с QList пользовательских классов

У меня есть общий вопрос о реализации основного источника данных в QAbstractTableModel. В QAbstractTableModel :: данные () доступ к функциям содержания источников данных с помощью индекса, состоящего из строки и значения столбца. Если мой основной источник данных является QList классов Person, где каждый член представляет столбец, как получить доступ к своим членам с данным индексом столбца? Единственный подход, который я могу думать о том, что я использую вид отображения, который отображает номер столбца члена класса Person: QVariant TableModel :: данные (Const QModelIndex и индекса, внутр роль) константные {если (роль == Qt :: DisplayRole) {Person человек = MySource [index.row ()]; если (index.column () == 0) возвращают person.getName (); иначе если (index.column () == 1) возвращают person.getAdress (); (...и так далее.. )} Вернуть QVariant (); } Является ли это подход к решению этой проблемы или есть лучше один? Если мой класс имеет 50 членов, которые были бы много работы, чтобы сделать. То же самое должно быть сделано, когда я пишу данные источника через QAbstractTableModel :: УстановитьДанные (). Ответы или ссылки на материалы, которые помогли бы мне понять эту часть реализации модели / представления в Qt очень много appriciated.
PSB
6

голосов
2

ответ
11.8k

Просмотры

Как изменить цвет фона заголовка цвет QTableView

Ниже то, что я в настоящее время пытался. Текст заголовка изменяет цвет правильно, но фон не изменится от значения по умолчанию. Шаблон рядный QVariant TableModel :: headerData (интермедиат раздел, Qt :: ориентация ориентирование, внутр роль) сопзЬ {// ... еще если (роль == Qt :: BackgroundRole) {вернуться QBrush (m_display.headerBackground); } // ...} Как я могу установить цвет фона?
andre
2

голосов
1

ответ
627

Просмотры

Как назначить QLinearGradient в QTableView элементы фона

Использование палитры QLineEdit в мы можем присвоить QGradient в качестве цвета фона: линия = QtGui.QLineEdit) палитра (= line.palette) QRectF = QtCore.QRectF (line.rect) () градиент (= QtGui.QLinearGradient (QRectF.topLeft (), QRectF.topRight ()) palette.setBrush (QtGui.QPalette.Base, QtGui.QBrush (градиент)) line.setPalette (палитра) line.show () при работе с QTableView и его QAbstractTableModel я вернуть твердый QColor от метода данных модели для каждого запроса BackgroundColorRole. Вместо сплошного цвета я бы предпочел назначить градиент к «пункту» Tableview. Как назначить градиент вместо сплошного цвета? от PyQt4 импорта QtCore, QtGui приложения = QtGui.QApplication ([]) класса Model (QtCore.QAbstractTableModel): Защита __init __ (Я): QtCore.QAbstractTableModel .__ __ INIT (сам) self.items = [[1, 'один', ' ОДИН'],
alphanumeric
2

голосов
2

ответ
392

Просмотры

Как изменить базовые данные о QAbstractTableModel полностью?

Это мой первый пост здесь, но я много помощи получил от всех вас, ребят, так как я начал программировать. Я новичок в Qt и попытаться сделать свой первый проект в данный момент. Мой вопрос о связи между моделью, лежащих в основе данных и представления. Я впервые сделал фоновые вещи (хранение данных и т.д.) отдельно от GUI. Теперь у меня есть класс шаблона матрицы, и я написал класс MatrixModel шаблон, который наследует от QAbstractTableModel. Это работает отлично, означает, что я могу редактировать таблицу и значение обновления в представлении и в данной модели. Теперь мой вопрос: Как изменить данные в модели без написания нового метода? mainwindow.cpp: матрица, т = {{1,2,3}, {4,5,6}, {7,8,9}}; MatrixModel * модель = новый MatrixModel (м); QTableView * Tableview = новый QTableView; tableView-> setModel (модель); Есть ли способ вызова м. транспонирование () для лежащих в основе данных модели? Что произойдет, если я изменю м? Влияет ли данные модели? Я пробовал много вещей, но ничего не получалось. Одна «проблема» в том, что я не могу использовать стандартный синтаксис сигнала / слот, потому что я работаю с шаблонными классами. Моя последняя попытка была сделать класс обновления в модели: шаблон аннулируются MatrixModel :: UpdateAll () {QModelIndex TopLeft = индекс (0,0); QModelIndex bottomRight = индекс (ROWCOUNT () - 1, ColumnCount () - 1); излучают dataChanged (TopLeft, bottomRight); } И я попытался подключить его с помощью кнопки и лямбда-функции: соединить (transposeButton, & QPushButton :: кликах [=, & т, & модель] () {m.transpose (); модели-> UpdateAll ();}); но это, казалось, врезаться мою программу, если я нажимаю кнопку. Я действительно desperated XD надеюсь, что вы можете мне помочь. Если вам нужна дополнительная информация, пожалуйста, спросите ^^ С наилучшими пожеланиями Деннис EDIT 1: Хорошо до сих пор я понял, (с вашей помощью :)), что я должен написать функции матрицы снова в модели (например, транспонирование ()) и испускают изменения данных оттуда (с испускают dataChanged или beginResetModel () ...), но я не могу изменить модели, лежащие в основе данных. Если я пишу это в главном окне: подключение (transposeButton, & QPushButton :: щелкнули, [& модель] () {модели-> транспонировать ();}); Это, в модели: шаблон недействительного MatrixModel :: транспонирование () {т (0,0) = 5; } Моя программа просто падает, если я нажмите кнопку транспонирование. Если я строка комментария м (0,0) = 5; из, все работает. EDIT 2: Может быть, есть проблема с хранением данных, так вот мой конструктор копирования и частные переменные моей матрицей класса: частный: станд :: вектора данные; size_t строки, столбцы; // Скопировать шаблон конструктор матрицы :: Матрица (Const матрица и другие): строки (other.rows), столбцы (other.columns) {данных = other.data; }
syc
2

голосов
1

ответ
218

Просмотры

Как управлять сортировкой стрелка индикатора на QTableView

Когда QTableView создан Я хочу, чтобы индикатор сортировки «стрелка», чтобы показать на колонке в середине. Стрелка должна быть направлена ​​вниз. Как этого добиться? от PyQt4 импорта QtCore, QtGui приложения = QtGui.QApplication ([]) класса Model (QtCore.QAbstractTableModel): Защита __init __ (Я): QtCore.QAbstractTableModel .__ __ INIT (сам) self.items = [[1, 'один', ' ONE '], [2, 'два', 'ДВА'], [3, 'три', 'три']] Защита ROWCOUNT (я, родитель = QtCore.QModelIndex ()): возвращение 3 DEF ColumnCount (я, родитель = QtCore.QModelIndex ()): возвращение 3 DEF данные (самостоятельно, индекс, роль): если не index.isValid (): возвращение если роль == QtCore.Qt.DisplayRole: возвращение self.items [index.row ()] [index.column ()] TableModel = Модель () Tableview = QtGui.
alphanumeric
2

голосов
2

ответ
3k

Просмотры

Using QItemDelegate with QAbstractTableModel

I have a QAbstractItemModel and a QItemDelegate and here is my problem. The Delegate does nothing. Its subroutines are being called but nothing happens. Here is what I would like to see in my table. Text : QComboBox : Text : Text : QProgressBar where : is a column seperator. Delegate. #ifndef DELEGATEACTION_H #define DELEGATEACTION_H #include #include #include #include #include #include class DelegateAction : public QItemDelegate { Q_OBJECT public: explicit DelegateAction(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; void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const; }; #endif // DELEGATEACTION_H #include "DelegateAction.h" DelegateAction::DelegateAction(QObject *parent) : QItemDelegate(parent) { } QWidget * DelegateAction::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { QWidget* editor = 0; switch (index.column()) { case 0: default: { editor = new QLabel(); break; } case 1: { QComboBox* combo = new QComboBox(parent); combo->addItem("Test"); combo->addItem("Test 2"); editor = combo; break; } case 4: { editor = new QProgressBar(parent); break; } } editor->installEventFilter(const_cast(this)); return editor; } void DelegateAction::setEditorData(QWidget *editor, const QModelIndex &index) const { QVariant value = index.model()->data(index, Qt::DisplayRole); switch (index.column()) { case 0: default: { QLabel* label = static_cast(editor); label->setText(value.toString()); break; } case 1: { QComboBox* combo = static_cast(editor); combo->setCurrentIndex(combo->findText(value.toString())); break; } case 4: { QProgressBar* progress = static_cast(editor); progress->setValue(value.toInt()); break; } } } void DelegateAction::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { QVariant value; switch (index.column()) { case 0: default: { value = static_cast(editor)->text(); break; } case 1: { value = static_cast(editor)->currentText(); break; } case 4: { value = static_cast(editor)->value(); break; } } model->setData(index, value); } void DelegateAction::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const { editor->setGeometry(option.rect); } Model. #ifndef MODELACTIONS_H #define MODELACTIONS_H #include #include class ModelAction : public QAbstractTableModel { Q_OBJECT public: explicit ModelAction(QObject *parent = 0); int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; Qt::ItemFlags flags(const QModelIndex &index) const; QVariant headerData(int section, Qt::Orientation orientation, int role) const; bool setData(const QModelIndex &index, const QVariant &value, int role); void sort(int column, Qt::SortOrder order); void setUnits(const QList* units); private: const QList* units; bool ascending[5]; }; #endif // MODELACTIONS_H #include "ModelAction.h" ModelAction::ModelAction(QObject *parent) : QAbstractTableModel(parent), units(0) { } int ModelAction::rowCount(const QModelIndex &parent) const { if (units == 0) { return 0; } else { return units->length(); } } int ModelAction::columnCount(const QModelIndex &parent) const { return 5; } QVariant ModelAction::data(const QModelIndex &index, int role) const { if (index.isValid() == false) { return QVariant(); } if (role == Qt::TextAlignmentRole) { if (index.column() == 0 || index.column() == 2) { return int(Qt::AlignLeft | Qt::AlignVCenter); } else { return int(Qt::AlignRight | Qt::AlignVCenter); } } else if (role == Qt::DisplayRole) { if (index.column() == 0) { // Unit's id. return index.row() + 1; } else if (index.column() == 1) { return "bob"; // Unit's Action. //return mechs.at(index.row())->getWeight(); } else if (index.column() == 2) { // Unit's Action start. //return mechs.at(index.row())->getTechnology(); } else if (index.column() == 3) { // Unit's Action end. //return Currency::numberToCurrency(mechs.at(index.row())->getPurchaseValue()); } else if (index.column() == 4) { // Unit's Action progress. //return Currency::numberToCurrency(mechs.at(index.row())->getSellValue()); } } return QVariant(); } QVariant ModelAction::headerData(int section, Qt::Orientation orientation, int role) const { if (role != Qt::DisplayRole) { return QVariant(); } if (orientation == Qt::Horizontal) { if (section == 0) { return "Id"; } else if (section == 1) { return "Action"; } else if (section == 2) { return "Begin Time"; } else if (section == 3) { return "End Time"; } else if (section == 4) { return "Progress"; } } return QVariant(); } void ModelAction::sort(int column, Qt::SortOrder order) { // MechCompare compare; // compare.column = column; // ascending[column] = !ascending[column]; // compare.ascending = ascending[column]; // qSort(mechs.begin(), mechs.end(), compare); // reset(); } void ModelAction::setUnits(const QList *units) { this->units = units; reset(); } Qt::ItemFlags ModelAction::flags(const QModelIndex &index) const { switch (index.column()) { case 0: default: { return Qt::NoItemFlags; break; } case 1: { return Qt::ItemIsEditable | Qt::ItemIsEnabled; } } } bool ModelAction::setData(const QModelIndex &index, const QVariant &value, int role) { switch (index.column()) { case 1: { } } } The only issue I'm aware of is the ModelAction::setData() function is incomplete. I have to go back and edit the data classes that this model displays before I can complete that subroutine. Still the comboboxes and progressbars should still display, just not do anything. At this point I only see the id numbers and my test text "bob" for each row in the table. The QComboBox and QProgressBar are not rendered at all. Any help will be appreciated. Jec
jecjackal
1

голосов
3

ответ
3k

Просмотры

Есть общий TableModel мы можем использовать в JTable:?

Я теперь, глядя в JTable: и есть куча бизнес-объектов, которые я извлечь из БД с Hibernate + Spring Data JPA. Я люблю, что Spring Data JPA обрабатывает всю громоздкую реализацию DAL, и было интересно, если есть что-то похожее на TableModel. В принципе, я бы что-то вдоль линий: общественного класса GenericTableModel расширяет AbstractTableModel И GenericTableModel будет использовать отражение и / или аннотации смотреть в Т. Существует ли что-то подобное? Я надеюсь, что я не должен иметь TableModel для каждого объекта я хочу, чтобы отобразить на JTable ..
Joao Coelho
2

голосов
1

ответ
578

Просмотры

Могу ли я использовать взаимодействие с данными QAbstractTableModel в в QThread?

Я знаю, что мы не можем использовать GUI-взаимодействия в не-GUI потоками (QThread). Но я не знаю, можем ли мы или не можем взаимодействовать с моделью (QAbstractItemModel) в потоках, и если правда, то как сделать это в правильном направлении? Я честно искал что-то об этом в Google и на SO, и кажется, что нет соответствующих ответов на мой вопрос.
Крайст
1

голосов
2

ответ
1.6k

Просмотры

Пользовательский редактор QAbstractTableModel

Кто-нибудь есть пример использования QWidget в качестве редактора в QAbstractTableModel? У меня есть столбец, который когда отредактированный должен создать QComboBox со списком выбора. Документы, кажется, предлагают мне нужно написать QAbstractItemDelegate и пользовательскую функцию краски, но это кажется излишним просто всплывающим стандарт QComboBox в Qt :: EditRole. Примечание - содержимое поле со списком являются одинаковыми для каждой строки, и нужно только показать, когда кто-то щелкает в клетке. Я знаю, что это должно быть просто, но я не могу заставить его работать. Это просто для таблицы на основе QTableWidget - но мне это нужно для очень большой таблицы данных.
Martin Beckett
3

голосов
1

ответ
5k

Просмотры

Центр выравнивания содержимого ячеек в QTableView

У меня есть QTableView. Есть ли способ, чтобы выровнять по центру, все содержимое ячейки этой точки зрения? Я не с помощью любого делегата. Это просто AbstractTableModel, который добавляется в качестве модели к QTableView. Как я должен выравнивать каждое содержимое ячейки к центру? Благодарю.
user1173240
2

голосов
1

ответ
1.3k

Просмотры

Редактировать таблицу в PyQt QAbstractTableModel без удаления содержимого

То, что я сделал до сих пор: я реализации пользовательских QAbstractTableModel (используется в QTableView-виджет), который содержит редактируемые ячейки. Свойства этих ячеек указаны в моих флагах () метод, который выглядит следующим образом: Защита флаги (самостоятельно, индекс): # Qt был импортирован из PyQt4.QtCore если index.column () <2: возвращение Qt.ItemIsEditable | Qt.ItemIsEnabled | \ Qt.ItemIsSelectable еще: возвращение Qt.ItemIsEnabled | Qt.ItemIsSelectable Клетки в первых двух столбцах отмечены как редактируемые так же, как я хочу. То, что я хочу сделать: Однако при двойном щелчке ячейки для запуска редактирования данных, содержащийся текст будет удален, а пустое поле отображается. Но я не хочу, чтобы удалить и заменить содержащийся текст, поскольку содержащийся текст может быть очень длинным и не должны быть перепечатаны. Я просто хочу, чтобы изменить то, что уже содержится. При двойном щелчке ячейки должны быть доступны для редактирования с ранее содержался текст внутри (может быть выбран). Вопрос: Как я могу добиться такого поведения? Должен ли я изменить мой метод флаги и задать различные свойства этих клеток?
aisen
2

голосов
2

ответ
1.4k

Просмотры

добавить текст с двумя разными цветами в колонке QTableView в Qt

Я использую QTableView для отображения активности пользователя в моем приложении. Моя модель содержит четыре колонки, каждый столбец отображает другой тип текста, как: имя пользователя в 1-активности пользователя колонки в 2-ой детали колонки деятельности в 3-м столбце, я хочу, чтобы отобразить как текст 2-го и 3-го столбца в одном столбце с другим цветом текста, разделенного с «-». Моя заявка в настоящее время выглядит следующим образом: Тем не менее, я хочу, чтобы выглядеть подобным Может кто-то пожалуйста, помогите мне решить это, заранее спасибо
Sanath Reddy
2

голосов
3

ответ
1.3k

Просмотры

How to sort QTableView in Qt4 and up

Код создает единый QTableView. Сортировку колонка была включена. Когда я нажимаю на имя столбца (1,2 или 3 ничего не происходит). Как сделать сортировку работы без использования прокси-модели? от PyQt4 импорта QtCore, QtGui приложения = QtGui.QApplication ([]) класса Model (QtCore.QAbstractTableModel): Защита __init __ (Я): QtCore.QAbstractTableModel .__ __ INIT (сам) self.items = [[1, 'один', ' ONE '], [2, 'два', 'ДВА'], [3, 'три', 'три']] Защита флагов (самоповреждения, индекс): возвращает QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsEditable DEF ROWCOUNT (я, родитель = QtCore.QModelIndex ()): возврат 3 Защиту ColumnCount (я, родитель = QtCore.QModelIndex ()): возврат 3 DEF данные (самостоятельно, индекс, роль): если не индексировать .isValid (): возвращает, если роль в [QtCore.Qt.DisplayRole, QtCore.Qt.
alphanumeric
7

голосов
2

ответ
9.6k

Просмотры

Редактировать таблицу в PyQt, используя QAbstractTableModel

Я пытаюсь создать изменяемую таблицу в PyQt. Вот код для отображения только таблицы: импорт SYS из PyQt4 импорта QtGui, QtCore из PyQt4.QtCore импорта * от PyQt4.QtGui импорта * # données à МЕНЕДЖЕР my_array = [[ '00', '01', '02'], [ '10', '11', '12'], [ '20', '21', '22']] защиту главное (): приложение = QApplication (sys.argv) ш = MyWindow () w.show ( ) sys.exit (app.exec_ ()) # Création де-ла-вю э дю conteneur класс MyWindow (QWidget): Защита __init __ (самостоятельно, * арг): QWidget .__ INIT __ (я, * арг) TableModel = MyTableModel (my_array, сам ) TableView = QTableView () tableview.setModel (TableModel) раскладка = QVBoxLayout (само) layout.addWidget (TableView) самостоятельно. основное () Если я реализовать метод УстановитьДанных и флаги, все детали даже не выбор ... Что такое решение, чтобы сделать тх стола для редактирования? Спасибо
nam
2

голосов
2

ответ
340

Просмотры

PySide QTableView УстановитьДанные для нескольких ячеек

Я использую QTableView и субтропических классифицироваться в QAbstractTableModel. При редактировании ячейки я заметил, что QAbstractTableModel.setData идет только через последнюю выбранную ячейку. Есть ли способ, чтобы получить УстановитьДанный работать с несколькими (выбранными) клетками? В качестве примера использования: Выберите четыре ячейки из таблицы. Начните редактировать на одну ячейку. Введите значение и нажмите клавишу ВВОД, чтобы совершить. Был ли значение изменить все четыре ячейки (в настоящее время он просто изменяет ячейку, выбранный последним) я попробовал к югу причислять closeEditor, затем пробегает по selectedIndexes называть их УстановитьДанным, но я не знаю, как получить значение ввода пользователя от closeEditor , Вот моя попытка, почти получилось, просто нужно входное значение. Защиту closeEditor (я, редактор, намек): is_cancelled = (подсказка == QtGui.QAbstractItemDelegate.RevertModelCache), если не is_cancelled: для индекса в себе. selectedIndexes (): если индекс == self.currentIndex (): продолжить input_value = ??? # Не знаю, как получить это здесь! self.model (). УстановитьДанный (индекс, input_value, QtCore.Qt.EditRole) возвращает QtGui.QTableWidget.closeEditor (я, редактор, намек)
Green Cell
7

голосов
1

ответ
15.9k

Просмотры

PyQt: Добавление строк в QTableView с помощью QAbstractTableModel

Я супер новичок в программировании на Qt. Я пытаюсь сделать простую таблицу, которая может быть строк добавлены, нажав на кнопку. Я могу реализовать таблицу штрафа, но не могу показаться, чтобы получить обновленные данные, чтобы показать, на столе. Я считаю, что моя проблема связана с тем, что я не могу показаться, чтобы правильно назвать какой-либо метод «Изменение данных» с помощью кнопки. Я попробовал несколько различных решений в Интернете все, которые ведут к 4 года назад, тупиковых постов. То, что я до сих пор является основной структурой, я просто не могу понять, как сделать обновление таблицы с новыми данными. Это основной вид я настроил с некоторыми тестовыми данными. В окончательной реализации, таблица будет начать пустой, и я хотел бы добавить строки и их отображения в виде таблицы. импорт SYS из PyQt4.QtCore импорта * из PyQt4.QtGui импорта * класса MyWindow (QWidget):
user3439556
1

голосов
2

ответ
155

Просмотры

QAbstractTableModel и излучают dataChanged для одной строки

Я вывел модель из QAbstractTableModel и теперь я хочу сообщить, что данные целый ряд были изменены. Если, например, данные строки с индексом 5 изменяется (4 колонки), чем при использовании следующий код работает, как ожидалось. испускают dataChanged (индекс (5,0), индекс (5, 0)); испускают dataChanged (индекс (5,1), индекс (5, 1)); испускают dataChanged (индекс (5,2), индекс (5, 2)); испускают dataChanged (индекс (5,3), индекс (5, 3)); Но если я пытаюсь добиться того же только с одной Emit, все столбцы всех строк в представлении будут обновлены. испускают dataChanged (индекс (5, 0), индекс (5, 3)); Что я делаю неправильно здесь? Минимальный пример (C ++ 11, QtCreator 4.7.1, Windows 10 (1803), 64 бит) demo.h #pragma один раз # include # include # include класса Demo: Public QAbstractTableModel {Q_OBJECT QTimer * т; общественности: Demo () {т = новый QTimer (это); t-> setInterval (1000); подключения (т, СИГНАЛ (тайм-аут ()), то это, SLOT (timerHit ())); t-> начать (); } Данные QVariant (Const QModelIndex & индекс, Int роль = Qt :: DisplayRole) Const переопределение {INT с = index.column (); если (роль == Qt :: DisplayRole) {QString strTime = QTime :: CURRENTTIME () ToString (). если (с == 0) возвращение "A" + strTime; если (с == 1) обратный "B" + strTime; если (с == 2) возвращение "C" + strTime; если (с == 3) возвращение "D" + strTime; } Вернуть QVariant (); } INT ROWCOUNT (Const QModelIndex &) Const переопределение {возврата 10; } Int ColumnCount (константный QModelIndex &) константное переопределение {возвращение 4; } частные слоты: timerHit недействительными () {// Труды испускают dataChanged (индекс (5,0), индекс (5, 0)); испускают dataChanged (индекс (5,1), индекс (5, 1)); испускают dataChanged (индекс (5,2), индекс (5, 2)); испускают dataChanged (индекс (5,3), индекс (5, 3)); // испускают dataChanged (индекс (5,0), индекс (5, 3)); //
SoulfreezerXP
3

голосов
2

ответ
285

Просмотры

Qt: различать сопротивление от того же или другого окна

Я использую QTableView, на котором я поставил свою собственную модель, наследуя от QAbstractTableModel, используя вызов QTableView :: setModel (). Табличный поддерживает перетаскивание: моя модель класса переопределяет mimeData () и dropMimeData (). Детали можно перетаскивать, даже между 2 экземплярами приложения. То, что я хотел бы достичь, это: dropMimeData () должно определить, поступает ли упал элемент из одного окна, или из другого окна другой запущенной копии приложения. И он должен вести себя по-разному в каждом конкретном случае. Использование аргумента Qt :: DropAction действие из dropMimeData (), казалось самой естественной вещью, но это не работает: всегда Qt :: CopyAction или Qt :: MoveAction, независимо от инициирующего окна, и только в зависимости от defaultDropAction от QTableView. Это возможно?
user377486
2

голосов
1

ответ
106

Просмотры

Qt: Что испускать при вставке элементов в моей модели намекнуть зрения перепроверить canFetchMore?

У меня есть пользовательская модель (расширяет QAbstractTableModel), где данные строк добавляются прагматично. По причинам производительности, я использую функциональность выборки (canFetchMore, fetchMore), чтобы избежать задержек UI, когда элементы не видны. При вставке новой строки, я не хочу, чтобы вызвать QAbstractItemModel :: rowsInserted. Но если эти строки будут отображаться в представлении, я хотел бы, чтобы они автоматически появляются. Они появляются, если пользователь взаимодействует с точки зрения, например, выбрав последний пункт (вид называет «canFetchMore» и будем называть fetchMore только если эти элементы будут видны). Как сигнал к виду, что несколько строк доступны для отображения, но должны быть выбраны?
jtooker
25

голосов
1

ответ
27.2k

Просмотры

Как установить высоту строки QTableView?

У меня есть QTableView и QAbstractTableModel. Я требую строк, чтобы иметь высоту, равную 24. Я знаю, что единственный способ сделать это по телефону QTableView :: setRowHeight. Так как модель является динамической может быть добавлены новые строки, но я не хочу называть setRowHeight каждый раз, когда добавляется новая строка. Как я могу настроить QTableView таким образом, что он использует ту же высоту для новых добавленных строк или может модель выслана высоту строк?
Ashot
3

голосов
2

ответ
5.5k

Просмотры

QTableView изменение цвета строки на основе значения

У меня есть QTableView, что я реализовал с моей собственной моделью наследнике QAbstractTableModel. Я хочу, чтобы иметь возможность изменить цвет строки в красный цвет, когда один из полей в строке имеет определенное значение. Я видел много примеров, когда ответ должен назвать модели УстановитьДанные и использовать Qt :: BackgroundRole, чтобы изменить цвет фона. Так как я подклассы в AbstractTableModel я переписана УстановитьДанные и данные поэтому вызов модели УстановитьДанные ничего не делает с цветом фона роли, так как я только обработки данных, роль которого Qt :: DisplayRole. Я предполагаю, что мой первый вопрос: есть ли простой способ изменить цвет всей роли? Если нет, то я предполагаю, что я реализовать эту часть в УстановитьДанном и данных для обработки BackgroundRole, которые я не имею ни малейшего представления о том, как сделать это, если кто-нибудь есть примеры о том, как сделать это было бы действительно помочь много ...
MBU
4

голосов
3

ответ
7.7k

Просмотры

Как вставить QPushButton в TableView?

Я реализую QAbstractTableModel, и я хотел бы, чтобы вставить QPushButton в последнем столбце каждой строки. Когда пользователь нажимает на эту кнопку, новое окно отображается больше информации об этой строке. Есть ли у вас какие-либо идеи, как вставить кнопку? Я знаю, о делегировании системы, но все примеры только о том, «как изменить цвет с помощью поля со списком» ...
izidor
2

голосов
1

ответ
737

Просмотры

Как скрыть флажки в использовании питона QTableView?

Я совершенно новой для питона, а также Qt. Я хотел бы использовать QTableView без флажков, возникающих в клетках Tableview, но, как кажется, они просто появляются там по умолчанию. Как я узнал, до сих пор, вы просто должны отключить Qt.ItemIsUserCheckable флаг. Но как я должен это делать? Я пытался использовать флаги - функцию QAbstractItemModell внутри QAbstractTableModel производного класса модели таким образом: DEF флагов (самость, индекс): возврат (QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsSelectable) Итак, что я сделал это: просто не возвращая Qt.ItemIsUserCheckable флага. Это отлично работает, например, для Qt.ItemIsEditable флага делает клетку редактируемой или нет (если он не возвращается), но делают это с ItemIsUserCheckable флага не имеет никакого эффекта флажки на. Так что мой вопрос: как я могу избавиться от флажков с помощью Python? Пожалуйста помоги!
MKa

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

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