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

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Помогите разобраться с делегатами  (Прочитано 11446 раз)
trenkinan
Гость
« Ответ #15 : Май 10, 2010, 12:17 »

и вот что интересно... если написать
Код
C++ (Qt)
qDebug()<<index.column();
то он ничего не выводит...в общем из-за чего может возникать проблема с индексами?
Записан
alexman
Гость
« Ответ #16 : Май 10, 2010, 15:32 »

Весь пример прикрепи?
Записан
trenkinan
Гость
« Ответ #17 : Май 12, 2010, 11:30 »

вот нужная часть :
Код
C++ (Qt)
model1 = new QSqlTableModel;
   proxyModel = new QSortFilterProxyModel(this);
   QTextCodec::setCodecForCStrings(QTextCodec::codecForName("windows-1251"));
   model1->setTable("peoples5");
   model1->select();
   ui->mytable->setModel(model1);
   ui->mytable->setEditTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed);
 
row = model1->rowCount();
qDebug()<<row;
createContextMenu();
        proxyModel->setSourceModel(model1);
        ui->mytable->setModel(proxyModel);
   QTextCodec::setCodecForTr(QTextCodec::codecForName("windows-1251"));
  model1->setHeaderData(6, Qt::Horizontal,
                  tr("Женат/замужем"));
   model1->setHeaderData(8, Qt::Horizontal,
                  tr("Дата рождения"));
 
   view.setModel(model1);
     QSqlQuery temp;
}
 
   else qDebug()<<"Error in opening"<<db.lastError();
}
void MainWindow::createContextMenu()
{
 
   ui->mytable->addAction(insertrow);
   ui->mytable->addAction(deleterow);
}
 
 
 
 
MainWindow::~MainWindow()
{
   delete ui;
}
 
 
 
//combobox delegate
 
ImageDelegate::ImageDelegate(QObject *parent)
    : QItemDelegate(parent)
{
}
 
QWidget *ImageDelegate::createEditor(QWidget *parent,
                                     const QStyleOptionViewItem & /* option */,
                                     const QModelIndex &index) const
{
    QComboBox *comboBox = new QComboBox(parent);
    if (index.column() == 1) {
        comboBox->addItem(tr("Да"));
 
        comboBox->addItem(tr("Нет"));
    }
qDebug()<<index.column();
    connect(comboBox, SIGNAL(activated(int)), this, SLOT(emitCommitData()));
 
    return comboBox;
}
 
void ImageDelegate::setEditorData(QWidget *editor,
                                  const QModelIndex &index) const
{
    QComboBox *comboBox = qobject_cast<QComboBox *>(editor);
    if (!comboBox)
        return;
 
    int pos = comboBox->findText(index.model()->data(index).toString(),
                                 Qt::MatchExactly);
    comboBox->setCurrentIndex(pos);
}
 
void ImageDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
                                 const QModelIndex &index) const
{
    QComboBox *comboBox = qobject_cast<QComboBox *>(editor);
    if (!comboBox)
        return;
 
    model->setData(index, comboBox->currentText());
}
 
void ImageDelegate::emitCommitData()
{
    emit commitData(qobject_cast<QWidget *>(sender()));
}
 
//end of delegate
 
Записан
alexman
Гость
« Ответ #18 : Май 12, 2010, 11:52 »

А где вызов void QAbstractItemView::setItemDelegate ( QAbstractItemDelegate * delegate )?
Записан
trenkinan
Гость
« Ответ #19 : Май 12, 2010, 23:46 »

нету=) как делать?
Записан
cya-st
Гость
« Ответ #20 : Май 13, 2010, 10:34 »

нету=) как делать?
Определяеш делегат: class MyDelegate : public QItemDelegate.... Ты книгу читал? Прочитай книгу, быстрее будет.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #21 : Май 13, 2010, 13:21 »

>>QTextCodec::setCodecForTr(QTextCodec::codecForName("windows-1251"));
А за каким лешим ты посредь программы кодек меняешь? Любишь блох искать?
Записан

Юра.
alexman
Гость
« Ответ #22 : Май 13, 2010, 13:22 »

ui->mytable->setItemDelegate( new ImageDelegate( ui->mytable ) );
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #23 : Май 13, 2010, 13:25 »

>>нету=) как делать?
Дык, метод, который указал alexman, вызови у представления, которое ты используешь. Для чего-то ты ведь делал делегат, но не используешь его
Записан

Юра.
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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