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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Как прописать метод дочернего объекта в родительском классе?  (Прочитано 8239 раз)
PavelVX
Гость
« : Май 28, 2012, 08:57 »

Заранее извиняюсь за возможно неправильную терминологию и криво составленный вопрос.
Есть виджет, в какой-то момент нужно создать собственное диалоговое окно с QTableView. Как мне у этого QTableView, на ходу, переопределить метод data(хочу в зависимости от данных отрисовывать по разному строки)Непонимающий

Код:
//мой метод
        QDialog dlg;
        dlg.setWindowTitle("Расклад: ");
        dlg.setMinimumWidth(600);
        QTableView * tblView = new QTableView(&dlg);
//тут переопределить tblView::data

//далее по плану

Записан
Bepec
Гость
« Ответ #1 : Май 28, 2012, 09:19 »

TableView не трогай.

Трогать нужно делегаты. По 1 на каждый тип данных, или 1 общий.
Записан
PavelVX
Гость
« Ответ #2 : Май 28, 2012, 09:36 »

Если честно, то не понял. Зачем мне делегаты для разового редактирования таблицы?
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #3 : Май 28, 2012, 10:00 »

Код:
//мой метод
         //...
        QTableView * tblView = new QTableView(&dlg);
//тут переопределить tblView::data

//далее по плану

А есть такой метод в QTableView-то вообще? На лету переопределить нельзя, только наследованием и переопределением
Код
C++ (Qt)
QVariant QAbstractItemModel::data ( const QModelIndex & index, int role = Qt::DisplayRole ) const
в модели.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Bepec
Гость
« Ответ #4 : Май 28, 2012, 10:09 »

Разовое редактирование таблицы? Как же я сразу не догадался. И статичное наверно? КОНЕЧНО ЖЕ.

Это же всё написано в самом первом сообщении, да так подробно!!!

Ну тогда конечно же бери Paint, рисуй там нужную картинку с таблицей и в нужный момент просто показывай пользователю!!!
Записан
PavelVX
Гость
« Ответ #5 : Май 28, 2012, 10:54 »

С data у QTableView был не прав Грустный У модели для данного вью надо было.
То-есть, если я правильно понял аналогию, то для виджета, который будет принимать drop из drug/drop нужно писать наследника и там переопределять нужные методы?
Записан
Bepec
Гость
« Ответ #6 : Май 28, 2012, 12:17 »

Да, ты прав, нооооо...

Сначала лучше объясни, что ты хочешь сделать.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #7 : Май 28, 2012, 16:11 »

откуда у всех такая нелюбовь к наследованию? как будто это что-то плохое.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


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

откуда у всех такая нелюбовь к наследованию? как будто это что-то плохое.
Если наследования можно избежать, то лучше его не использовать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
PavelVX
Гость
« Ответ #9 : Май 29, 2012, 06:19 »


Автор: kambala
Цитата
откуда у всех такая нелюбовь к наследованию? как будто это что-то плохое.

Это не нелюбовь, это здравый смысл. Зачем мне плодить класс ради разового использования? Я понимаю, когда класс будет использоваться переодически, но если мне нужно диалоговое окно с выводом табличной части - плодить классы я не буду.

Автор: Bepec
Цитата
Да, ты прав, нооооо...
Сначала лучше объясни, что ты хочешь сделать.

Есть уже два случая, когда бы я не писал наследника, а переопределил методы находу. И думаю это только начало. Улыбающийся
1. С чего вопрос и возник: диалоговое окно с таблицей, у которой нужно раскрасить красным критические значение. Делается через переопределение метода data в модели. Писать наследника для этого нехотелось бы.
2. Драг_дроп на контрол. Есть QListView с элементами, по которым будет компоноваться фильтр. На этот лист элементы фильтра перетаскиваются мышкой(драг_дроп). Тут 50/50. Можно и наследника сделать, заодно и в конструкторе поопределять все нужные переменные. Но можно и на ходу переопределить методы и реакции.
Как-то так. Но в первом случае - наследник это точно сильно круто.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #10 : Май 29, 2012, 09:19 »

1. Делаешь своего делегата и в нем красишь.
2. Чем стандартное поведение не устраивает?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
PavelVX
Гость
« Ответ #11 : Май 29, 2012, 09:50 »

1. Зачем городить делегата-то? Я помимо раскраски еще и редактировать могу.
2. а dropEvent(QDropEvent *event) вы как будете разбирать переданный элемент? Да и в остальных подобных методах нужны проверки.
Я или запутался или понять не могу.
« Последнее редактирование: Май 29, 2012, 09:53 от PavelVX » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #12 : Май 29, 2012, 09:53 »

1. И? Делегат тебе не запрещает редактировать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
« Ответ #13 : Май 29, 2012, 10:09 »

Походу Павел запутался Подмигивающий

Ты можешь делать драг & дроп своих данных.

Ты можешь делегатом раскрашивать всё что движется.

Записан
PavelVX
Гость
« Ответ #14 : Май 29, 2012, 10:10 »

Но делегата-то все равно придется создавать или переопределять из имеющихся, а в нем уже делать раскраску. Я правильно понимаю?
Если применить это к реалиям, то в черновом раскладе покажите, как мне это сделать? (я правда запутался, и не могу понять, зачем тут делать делегат)
Код:

        QDialog dlg;
        dlg.setWindowTitle("Критические значения: ");
        dlg.setMinimumWidth(600);
        QTableView * tblView = new QTableView(&dlg);
        SpecTableModel * modelCrit = new SpecTableModel(&dlg); //наследник от стандартной модели со своими прибабахами
        modelCrit->setTable("tbl(col=3)");
        tblView->setModel(modelCrit);
        tblView->setAlternatingRowColors(true);
        modelCrit->select();

/*раскидывание по диалогу остальных элементов*/
        dlg.exec();

        if (dlg.result())
        {
.......
Вот и весь код. Я тут же и хотел data переопределить для раскраски. Как вы предлагаете тут использовать делегата?
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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