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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: emit closeEditor  (Прочитано 8720 раз)
Max Payne
Гость
« : Май 30, 2010, 11:41 »

Как послать сигнал emit closeEditor если все методы в ItemDelegate конст??
Компилятор ругаеться помогите пож...
Код:
void ComboDelegate::setEditorData(QWidget *editor,
                                    const QModelIndex &index) const
{
    QVariant data = index.model()->data(index, Qt::DisplayRole);
        switch(typeeditor)
        {
        case TBool:
            {
                        QComboBox *cmbox = static_cast<QComboBox *>(editor);
                        if (data.toString()=="true")
                        {
                           
                            cmbox->setCurrentIndex(cmbox->findText("true"));
                                //тут нужно послать emit closeEditor(editor,QAbstractItemDelegate::EditNextItem);
//если писать свой слот нада передавать первым параметром QWidget * если передать QWidget *editor, опять ругаеться /////компилятор...

                        }
                        else
                        {
                           
                            cmbox->setCurrentIndex(cmbox->findText("false"));
                               
                        }

                        break;
                    }
        }
}
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


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

Че компилятор то пишет? Че за привычка выкладывать код без текста ошибки?!
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


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

Max Payne, а зачем ты пытаешься посылать сигнал closeEditor в функции, которая лишь заполняет виджет-редактор данными?

П.С. о том как посылать сигнал из константного метода смотри пример %QTDIR%\examples\itemviews\stardelegate
файлы:
stardelegate.cpp
stardelegate.h
Записан

Юра.
Max Payne
Гость
« Ответ #3 : Май 31, 2010, 02:28 »

Вот такую ошибку пишет компилятор
Код:
 error: passing 'const ComboDelegate' as 'this' 
argument of 'void QAbstractItemDelegate::closeEditor(QWidget*, QAbstractItemDelegate::EndEditHint)' discards qualifiers

Автор: lit-uriy
Цитата
Max Payne, а зачем ты пытаешься посылать сигнал closeEditor в функции, которая лишь заполняет виджет-редактор данными?

У меня втаблице два делегата комбобокс и едитлайн, нужно сделать чтоб при изменении индекса комбобокса на тру, я переходил к редактированию лайн едит...
Я думал послать сигнал emit closeEditor(editor,QAbstractItemDelegate::EditNextItem);
но изза константности методов не получилось...
« Последнее редактирование: Май 31, 2010, 02:35 от Max Payne » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


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

>>при изменении индекса комбобокса на тру
вот я именно про это. Ты пытаешься посылать сигнал, до того как пользователь сможет изменить КомбоБокс .

>>но изза константности методов не получилось...
насчёт этого я тебе дал ссылки
Записан

Юра.
Max Payne
Гость
« Ответ #5 : Май 31, 2010, 08:40 »

Тогда можна посилать из
Код:
void ComboDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
                                   const QModelIndex &index) const
{
  QVariant data;
  int ty;
        switch(typeeditor)
        {
                case TBool:
                        QComboBox *cmbox = static_cast<QComboBox *>(editor);
                        data = cmbox->currentText();
                        int row = index.row();
                        int col = index.column();
                        col +=1;
                        ty = cmbox->currentIndex();
                        if(cmbox->currentText()=="true")
                        {
                                QModelIndex ind = model->index(row,col);
                                //QAbstractItemView::edit(ind);
                                QMessageBox::information(0,"","emit");
connect(cmbox,SIGNAL(currentIndexChanged(int)),SLOT(ComboDelegate::ch_index(int)));
}
                        else
                        {
                            //cmbox->blockSignals(true);
                            cmbox->setCurrentIndex(cmbox->findText("
                        }
                        break;
        }
    model->setData(index, data, Qt::EditRole);
  
тут пользователь изменил индекс и даные переносяться в модел....
И только потом  я высылаю сигнал;
Не могу понять толи я туплю, толи сигнал не высылаеться...
editingFinished() высылаеться при выходе с void ComboDelegate::setModelData(QWidget *editor,
QAbstractItemModel *model,   const QModelIndex &index) const
« Последнее редактирование: Май 31, 2010, 10:28 от Max Payne » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


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

>>SLOT(ComboDelegate::ch_index(int))
а это что такое?
Записан

Юра.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


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

>>QMessageBox::information(0,"","emit");
научись пользоваться qDebug() для отладки, заодно можешь увидеть матюги Qt в консоли, которые прольют свет на многие вещи
Записан

Юра.
Max Payne
Гость
« Ответ #8 : Май 31, 2010, 20:51 »

SLOT(ComboDelegate::ch_index(int))
а это что такое?

это просто мой слот реализован в этом класе....

Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


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

А он у тебя статический?Непонимающий
Записан

Юра.
Max Payne
Гость
« Ответ #10 : Июнь 01, 2010, 00:26 »

нет
Код:
void ComboDelegate::commitAndCloseEditor( )
{
    QMessageBox::information(0,"","CommitData");
    //QComboBox *editor = qobject_cast<QComboBox *>(sender());
    QAbstractItemDelegate::closeEditor(editor,QAbstractItemDelegate::EditNextItem);
    emit closeEditor(editor);
}
Что то крайне банальное чтоб понять как работает...
Записан
ритт
Гость
« Ответ #11 : Июнь 01, 2010, 04:47 »

> QAbstractItemDelegate::closeEditor(editor,QAbstractItemDelegate::EditNextItem);
> emit closeEditor(editor);

это откуда такое? т.е. зачем сигнал испускать два раза подряд?
и вообще проблемы треда не понимаю - если уверен, что место для испускания closeEditor() подходящее, const_cast уже отменили, что ли?
Записан
Max Payne
Гость
« Ответ #12 : Июнь 01, 2010, 16:57 »

это откуда такое? т.е. зачем сигнал испускать два раза подряд?
и вообще проблемы треда не понимаю - если уверен, что место для испускания closeEditor() подходящее, const_cast уже отменили, что ли?

Я просто не могу сигнал поймать, не посылаеться сигнал для вызова моей функции... Из функции делегата...
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #13 : Июнь 01, 2010, 17:16 »

>>SLOT(ComboDelegate::ch_index(int))
слот в функции connect указан НЕ верно, смотри любые примеры записи для этой функции
Записан

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


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