Russian Qt Forum
Апрель 29, 2024, 04:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 23 24 [25]
361  Qt / Вопросы новичков / Re: логика создания модели и делегата : Январь 05, 2015, 04:05
Модель никакого отношения к QWidget не имеет. Модель работает с представлениями типа: QListView, QTableView, QTreeView.
А делегат нужен для того, чтобы удобнее было редактировать данные в представлении и записывать изменения в модель.

А куда у тебя установлен делегат?
362  Qt / Model-View (MV) / Re: Делегат + QDateTimeEdit : Январь 03, 2015, 13:55
Ну это-то как раз не проблема. В setData измени условие, например так:

Код:
if (index.column() == 2 && role == Qt::EditRole && rowTable.value("date_record").toDate() != value.toDate())
363  Qt / Model-View (MV) / Re: Делегат + QDateTimeEdit : Январь 03, 2015, 12:04
Писал на скорую руку, может что-то пропустил. Пример только на UPDATE.
364  Qt / Model-View (MV) / Re: Делегат + QDateTimeEdit : Январь 03, 2015, 10:52
Тогда пишешь свою модель на QAbstractTableModel, и работаешь с этой моделью в QTableView. Почитай Земскова Юрия, хоть книжка и не новая, но хорошо расписано про работу с БД.

ЗЫ. могу показать пример моей модели, если есть желание использовать этот метод.
365  Qt / Model-View (MV) / Re: Делегат + QDateTimeEdit : Январь 03, 2015, 10:38
Дак в исходниках как раз именно так. Пример: StarDelegate.
Там и эта функция. Я даже название не менял.

Правда нигде нет примера соединения делегата с его моделью... Чтобы отслеживать сделанные изменения.

Если у меня не правильно, то где найти правильно?

Зачем использовать QTableWidget для работы с базами данных? Это же очень не удобно. Есть же нормальное решение model - view.
Используй стандартную модель, если работаешь с простыми таблицами.
366  Qt / Model-View (MV) / Re: Делегат + QDateTimeEdit : Январь 02, 2015, 21:49
Таблицу (т.е. представление) оповещает об изменении модель, в которой реализуются методы data и setData. Для чего оповещать представление из делегата?
Или у тебя таблица без модели?
367  Qt / Model-View (MV) / Re: Делегат + QDateTimeEdit : Январь 02, 2015, 21:22
Какую роль выполняет эта функция void DateTimeDelegate::_commitAndCloseEditor()?
368  Qt / Model-View (MV) / Re: Какой сигнал эмитится при редактировании записи представления? : Декабрь 26, 2014, 18:31
Может подойдет такой способ:

Использую для комбобокс делегата QItemDelegate, переопределяю createEditor

Код:
QWidget *sAlignDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem& /* option */, const QModelIndex& /* index */) const
{
    QComboBox *editor = new QComboBox(parent);
    editor->addItem(tr("Left"), 1);
    editor->addItem(tr("Right"), 2);
    editor->addItem(tr("Center"), 4);
    editor->installEventFilter(const_cast<sAlignDelegate *>(this));
    return editor;
}

переопределяю setEditorData, куда передаю текущее значение из модели:

Код:
void sAlignDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
    int value = index.model()->data(index, Qt::EditRole).toInt();
    QComboBox *combo = static_cast<QComboBox*>(editor);
    combo->setCurrentIndex(combo->findData(value));
    connect(editor, SIGNAL(currentIndexChanged(int)), this, SLOT(indexChanged(int)));
}

когда меняю значение в комбобоксе, отправляю сигнал о смене значение.

Код:
void sAlignDelegate::indexChanged(int idx)
{
    emit currentDataChanged(idx);
}

А когда теряется фокус, отрабатывает переопределенный setModelData

Код:
void sAlignDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex& index) const
{
    QComboBox *combo = static_cast<QComboBox*>(editor);
    int value = combo->itemData(combo->currentIndex()).toInt();
    model->setData(index, value);
}

и соответственно только тогда отрабатывает dataChanged
369  Qt / Вопросы новичков / Re: сортировка : Декабрь 25, 2014, 06:47
А QSortFilterProxyModel не поможет?
370  Qt / Вопросы новичков / Re: простейший скрипт закачки файла по FTP, подскажите что делаю не так : Декабрь 22, 2014, 11:30
Попробуй reply->readAll(); поместить в void MainWindow::uploadProgress()
371  Qt / Базы данных / Re: Внешний вид таблицы результатов : Декабрь 19, 2014, 16:46
Добрый день!

Если не секрет, почему связка QTableView + QSqlTableModel?
Я обычно для редактируемых моделей использую связку QTableView + QSortFilterProxyModel + QAbstractTableModel, что дает возможность настраивать внешний вид данных в таблице
по своему усмотрению, без особых затрат.

1. Для изменения внешнего вида данных в ячейках переопределяется QVariant data(const QModelIndex &index, int role) const Например:
Код:
case Qt::FontRole: {
            QFont font = QFont("Arial", 10, QFont::Normal);
            return qVariantFromValue(font);
            break;
    }

    case Qt::TextAlignmentRole: {
            return int(0x0001 | 0x0080);
            break;
    }

2. Я обычно делаю вот так: verticalHeader()->setDefaultSectionSize(int);
3. Для этого в модели переопределяется bool QAbstractItemModel::​setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole)
4. Не понял что имеется ввиду "шрифт полей"

Наверное все это легко сделать и с QSqlTableModel, но почему-то мне больше понравилось работать с QAbstractTableModel.
Страниц: 1 ... 23 24 [25]

Страница сгенерирована за 0.078 секунд. Запросов: 23.