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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Срочно помогите с таблицей!  (Прочитано 8103 раз)
linuxoid
Гость
« : Октябрь 16, 2007, 16:25 »

как считать выделенные ячейки в QTabeView и засунуть их в переменную??? Непонимающий!!! использую и QSqlTableModel и есть своя модель!Помогите пожалуйста срочно, я уже всё перепробовал!то ли у меня QT глючит, то ли я уже глючу)заранее спасибо!
QT 4.2.3
Записан
ритт
Гость
« Ответ #1 : Октябрь 16, 2007, 16:45 »

копай QItemSelectionModel

/убей - не помню была ли данная модель в 4.2.х, но думаю, что да/
Записан
Kainit
Гость
« Ответ #2 : Октябрь 16, 2007, 16:48 »

Код:
QString TMyMegaTableView::GetAllSelectedInOneString()
{
    QModelIndexList selected = selectedIndexes();

    QString result;

    for(int i=0; i<selected .count(); i++)
        result += selected.at(i).model()->data(selected.at(i), Qt::DisplayRole));

    return result;
}

Можно придумать полаконичнее, но так тоже должно работать. Но самое главное что QItemSelectionModel тут совершенно ни к селу.
« Последнее редактирование: Октябрь 16, 2007, 17:14 от Kainit » Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Октябрь 16, 2007, 17:02 »

QItemSelectionModel в тему также, так как selectedIndexes работает через этот класс

Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Kainit
Гость
« Ответ #4 : Октябрь 16, 2007, 17:13 »

Я в том смысле что копать лучше с QAbstractItemView... а что selectedIndexes через QItemSelectionModel работают, то понятно, но для понимания MVC надо много времени, а раз уж человеку надо срочно...
Записан
ритт
Гость
« Ответ #5 : Октябрь 16, 2007, 19:38 »

кайнит (правильно?), дело в том, что я попросту не имею понятия откуда линуксоид собрался читать выделенные ячейки
Цитировать
как считать выделенные ячейки в QTabeView и засунуть их в переменную??? !!! использую и QSqlTableModel и есть своя модель!

если читать их надо из вьюхи, конечно, быстрее воспользоваться функциями-обёртками
если же читать их надо вне вьюхи (из модели или ещё откуда), то других вариантов не вижу, кроме как читать у вьюхи QItemSelectionModel и работать непосредственно с ней
Записан
linuxoid
Гость
« Ответ #6 : Октябрь 17, 2007, 09:47 »

ПОМОГИТЕ!Выглядит всё так::::

1)        QModelIndexList index = tableView->selectedIndexes();
2)        for(int i=0; i<index.count(); i++)
3)        var = tableView->model()->data(index.at(i));
4)        qDebug() << var.toString();

но проблема в 1 - ой строчке!пишет:

!!! error: ‘virtual QModelIndexList QTableView::selectedIndexes() const’ is protected!!!ъ
срочно помогите пожалуйста!!!Заранее благодарю. В замешательстве
Записан
Kainit
Гость
« Ответ #7 : Октябрь 17, 2007, 10:00 »

Про срочность можешь уже и не писать.

Есть 2 варианта, правильный и чуть менее.

1. (правильный) метод должен быть методом твоего View (просто наследуешь тупо обычный QTabeView и добавляешь метод)
Код:
QString TMyMegaTableView::GetAllSelectedInOneString()
т.е. просто сделай тупой класс
Код:
class TMyMegaTableView : public QTabeView 
{
public:
    TMyMegaTableView (QWidget *parent);

    QString GetAllSelectedInOneString();
};

TMyMegaTableView (QWidget *parent) : QTreeView(parent){}


2. (чуть менее правильный) тебе всё равно придётся отнаследоваться и тебе надо будет распаблишить метод selectedIndexes(), но это ХАК и за такое бъют по рукам раскалённым стальным прутом.

И надо помнить что есть прямая дырка, а есть попытки почесать пятку через плечо. Прямая и абсолютно законная дырка - наследование.
« Последнее редактирование: Октябрь 17, 2007, 10:06 от Kainit » Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #8 : Октябрь 17, 2007, 10:01 »

Хм, все верно, этот метод protected. Юзай значит QItemSelectionModel или создавай наследника от QTableView
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #9 : Октябрь 17, 2007, 11:30 »

Я делал так. Все работает замечтательно.   
qtvReferences - вьюха
QItemSelectionModel* qismSelection=qtvReferences->selectionModel();   
QModelIndexList qmilIndexes=qismSelection->selectedIndexes();
for (int i=0; i<qmilIndexes.count(); i++)
{
  if (qmilIndexes.at(i).column()!=0) continue;
// Какое-либо действие
}
В qmilIndexes  попадут все ячейки и в цикле их нужно отсеивать, т.е. я отсеиваю все, которые не в первой колонке.
Записан

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

спасибо!Вы Человеки с большой буквы!
Записан
ритт
Гость
« Ответ #11 : Октябрь 17, 2007, 12:10 »

и всё-таки селекшнмодель! Улыбающийся
Записан
Kainit
Гость
« Ответ #12 : Октябрь 17, 2007, 12:21 »

Цитировать
и всё-таки селекшнмодель!
Да, похоже что так.

Но программеры троллевские непоследовательны
tableView->selectedIndexes(); - приваченный

tableView->selectionModel()->selectedIndexes(); - публичный

Просто бред...

Записан
ритт
Гость
« Ответ #13 : Октябрь 17, 2007, 12:57 »

это не бред, это - концепция модель/вью-ппрограммирования троллей
вы ведь не станете называть бредом, допустим, формат тындекс-рсс, раз уже существует формат рсс-атом...или станете? Улыбающийся

ну и, в конце-концов, всегда можно отправить саггест в трекер и подробно обрисовать ситуацию на удивлённый вопрос дежурного: "а зачем вам публичный селектедИндексез во вьюхе, если он есть в публичной селекшнмодели?"
Записан
Kainit
Гость
« Ответ #14 : Октябрь 17, 2007, 14:25 »

Насчет ындекс-рсс не скажу а вот если поглядеть исходники, оказывается что всё не совсем так как я полагал и
tableView->selectedIndexes();
tableView->selectionModel()->selectedIndexes();
это разные вещи!

Код:
QModelIndexList QTreeView::selectedIndexes() const
{
    QModelIndexList viewSelected;
    QModelIndexList modelSelected;
    if (selectionModel())
        modelSelected = selectionModel()->selectedIndexes();
    for (int i = 0; i < modelSelected.count(); ++i) {
        // check that neither the parents nor the index is hidden before we add
        QModelIndex index = modelSelected.at(i);
        while (index.isValid() && !isIndexHidden(index))
            index = index.parent();
        if (index.isValid())
            continue;
        viewSelected.append(modelSelected.at(i));
    }
    return viewSelected;
}

О как.

Т.е., пользоваться tableView->selectedIndexes(); гораздо более логично для описанных выше задач, нежели tableView->selectionModel()->selectedIndexes().
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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