Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT4] QtableView выделение всей строки, и получение текущей позиции курсора  
:(
    Опции темы
Programister0
Дата 2.12.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



вот и весь вопрос !
PM MAIL WWW ICQ Skype   Вверх
JackYF
Дата 2.12.2007, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Насчёт выделения строки копай в setSelectionModel().

Получение текущей позиции курсора - modelIndex()


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Programister0
Дата 2.12.2007, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



спасибо вроде с выделением строк разобрался:
setSelectionBehavior( QAbstractItemView::SelectRows );

а вот с определением позиции курсора нет,
надо определять позицию при её изменении 
методы: activated, entered, pressed, clicked - неподходят - они срабатывают на enter или click а надо на реагировать на перемещение курсора. 
PM MAIL WWW ICQ Skype   Вверх
JackYF
Дата 2.12.2007, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Цитата(Programister0 @  2.12.2007,  16:01 Найти цитируемый пост)
они срабатывают на enter или click а надо на реагировать на перемещение курсора.  

похоже, действительно, что встроенного события на "просто перемещение" с клавиатуры нет. Попробуй на всякий случай половить "entered", если нет, тогда, наверное, придётся самому ловить события клавиатуры влево-вправо/вверх-вниз.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Programister0
Дата 2.12.2007, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



Цитата

наверное, придётся самому ловить события клавиатуры 

все keyPressEvent ( QKeyEvent * event )  в секции и [virtual protected] 
как можно ещё отловить эти события?
PM MAIL WWW ICQ Skype   Вверх
JackYF
Дата 2.12.2007, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Цитата(Programister0 @  2.12.2007,  18:23 Найти цитируемый пост)
все keyPressEvent ( QKeyEvent * event )  в секции и [virtual protected] 
как можно ещё отловить эти события? 

а зачем "ещё"? так и лови.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Programister0
Дата 2.12.2007, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



блин для этого придется создавать свой класс от QTableView, можно как нибудь по другому?


Это сообщение отредактировал(а) Programister0 - 2.12.2007, 20:08
PM MAIL WWW ICQ Skype   Вверх
archimed7592
Дата 2.12.2007, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Гхм, Programister0, а чем не подходят слоты selectionChanged и currentChanged? Местоположения курсора можно изменить многими способами(в т.ч. вообще программно) и, мне кажется, что лучше не использовать такие ограниченные решения, как перехват "всех" возможных способов изменения.

Добавлено через 2 минуты и 5 секунд
Цитата(Programister0 @  2.12.2007,  20:08 Найти цитируемый пост)
можно как нибудь по другому

Можно создать свой класс, унаследованный от QTableView, вывести наружу сигналы, и потом пользоваться им как-будто ничего для него писать и не приходилось smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Любитель
Дата 2.12.2007, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Наследуемся от QTableView, переопределяем void QAbstractItemView::currentChanged (const QModelIndex & current, const QModelIndex & previous) (протектед слот).


--------------------
PM MAIL ICQ Skype   Вверх
Programister0
Дата 2.12.2007, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



да варианты с selectionChanged и currentChanged намного привлекательнее, но все равно требуют написания своего класса от QTableView, это накладно и неудобно, было-бы проще что-то что не требует создания класса
PM MAIL WWW ICQ Skype   Вверх
archimed7592
Дата 2.12.2007, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Код

class MyTableView
    :    public QTableView
{
    Q_OBJECT
public:
    MyTableView(QWidget *parent = 0)
        :    QTableView(parent)
    { }
    
signals:
    void currentChanged( const QModelIndex & current, const QModelIndex & previous );

protected slots:
    void currentChanged( const QModelIndex & current, const QModelIndex & previous )
    { QTableView::currentChanged(current, previous); emit currentChanged(current, previous); }
};
Гхм, чё тут накладного то?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Programister0
Дата 3.12.2007, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



спасибо, все работает 
но, тот вариант который вы написали моему компилятору непонравился:
Цитата

ui_Test.h:38: error: `void MyTableView::currentChanged(const QModelIndex&, const QModelIndex&)' and `void MyTableView::currentChanged(const QModelIndex&, const QModelIndex&)' cannot be overloaded

но после удаления строк:
Код

    void currentChanged( const QModelIndex & current, const QModelIndex & previous )
    { QTableView::currentChanged(current, previous); emit currentChanged(current, previous); }

все пошло как по часам, 
я соединил сигнал и свою функцию:
Код

connect(MyTable,
          SIGNAL( currentChanged( const QModelIndex &, const QModelIndex &) ),
          this,
          SLOT( itemChange ( const QModelIndex &, const QModelIndex &) )
          );

теперь itemChange вызывается всегда когда курсор меняет положение,

но теперь я непонимаю как и откуда это все берется?
ведь сигнал currentChanged нигде не описан, только в Protected Slots;
 и где можно узнать какие ещё функции можно записать в signals?

PM MAIL WWW ICQ Skype   Вверх
JackYF
Дата 3.12.2007, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Цитата(Programister0 @  3.12.2007,  11:03 Найти цитируемый пост)
сигнал currentChanged нигде не описан, только в Protected Slots;

так это слот, а не сигнал smile его, значит, вызывает сама QT.
Цитата(Programister0 @  3.12.2007,  11:03 Найти цитируемый пост)
и где можно узнать какие ещё функции можно записать в signals?

ты сам можешь создавать сигналы


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
SABROG
Дата 3.12.2007, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(Programister0 @  3.12.2007,  11:03 Найти цитируемый пост)
 и где можно узнать какие ещё функции можно записать в signals?


В Qt Assistant, обычно раздел называется "List of All Members for [имя_класса]". Для твоего: "List of All Members for QTableWidget". Обычно в описании каждого класса есть ссылка типа "List of all members, including inherited members". А вообще currentChanged слот унаследованного класса QAbstractItemView и этот класс используется не только в QTableWidget. Т.ч. можно спокойно ничего не наследовать и использовать простой вариант, скажем для model based контролов:
Код

connect(
            myTreeView->selectionModel(), 
            SIGNAL(currentChanged(const QModelIndex &,const QModelIndex &)),
            this, 
            SLOT(myTreeView_currentChanged(const QModelIndex &,const QModelIndex &))); 



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
archimed7592
Дата 4.12.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Цитата(Programister0 @  3.12.2007,  11:03 Найти цитируемый пост)
но после удаления строк:

Ну, да, не надо было с одним и тем же именем делать... Одного я правда не понял:
т.е. после удаления ключевых строк у тебя всё заработало? smile 

Кто-нибудь из знатоков Qt может объяснить это(к сожалению, сейчас нет времени разбираться)?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Programister0
Дата 4.12.2007, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



да все отлично работает, 
но вообще непонимаю как,
 и откуда это все берется вот 
currentChanged была в Protected Slots а здесь её используем как SIGNAL 
нигде о такой возможности в Assisten'те не написано, какие ещё функции можно использовать как сигналы? как это определить?

Это сообщение отредактировал(а) Programister0 - 5.12.2007, 02:53
PM MAIL WWW ICQ Skype   Вверх
SABROG
Дата 5.12.2007, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Я так понимаю разница в том, что производному классу доступны protected методы, а в connect не происходит прямого доступа к защищенному методу, только лишь его описание, прототип. Вызов защищенного слота происходит уже внутри класса (как и положено) QTableView/Widget.

Цитата

Private(частный) раздел описания класса обычно находится вначале описания класса и содержит данные, доступ к которым закрыт из внешнего мира. Это и есть та самая "строго охраняемая" зона класса, доступ к которой можно получить только из методов самого класса. Она скрыта от внешнего мира глухой непробиваемой стеной и доступ к данным раздела private обеспечивается только с помощью, специально описанных в других разделах, методов. Скрытые в этом разделе данные также не доступны для всех производных классов.


Цитата

Protected(защищенный) - раздел описания класса содержит данные и методы, доступ к которым закрыт из внешней среды, но они напрямую доступны производным классам.

Таким образом, раздел protected используется для описания данных и методов, которые будут доступны только из производных классов. А в производных классах эти данные и методы воспринимаются, как если бы они были описаны в самом производном классе. 



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
archimed7592
Дата 5.12.2007, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



SABROG, да при чём тут private/protected smile. Если ты не сделал сигнала, то сигналов никаких не будет. Сигналов никто не делал, но они откуда-то берутся. Вопрос: откуда?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
SABROG
Дата 5.12.2007, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Дык уже ответили человеку тут

Не надо путать сигналы со слотами. Сигналы "испускают" сами классы, нам не надо их звать, они сами придут. А чтобы мы узнали о их приходе нам надо повесить на дверь звонок в виде слота. А то уйдет сигнал вместе с бутылкой пива (параметром) так и не услышанным.

Собственноручно сигналы надо писать только в том случае, если создаем новый класс или модифицируем старый так, чтобы он сообщал о каком-то новом действии, которого не реализовали. Например для QLineEdit можно придумать сигнал, который прийдет если текстовое поле стало пустым, чтобы сделать неактивной кнопку "OK", если продолжение программы невозможно без ввода каких-нибудь данных, скажем серийного кода. Правда пример не очень хороший, т.к. сигнала textChanged вполне хватит на проверку пустоты.

Чтобы не быть голословным, пример на базе класс QItemSelectionModel. Класс испускает сигнал currentChanged, если удаляет, вставляет строки и т.д.

Код

void QItemSelectionModelPrivate::_q_rowsAboutToBeRemoved(const QModelIndex &parent,
                                                         int start, int end)
{
    Q_Q(QItemSelectionModel);

    // update current index
    if (currentIndex.isValid() && parent == currentIndex.parent()
        && currentIndex.row() >= start && currentIndex.row() <= end) {
        QModelIndex old = currentIndex;
        if (start > 0) // there are rows left above the change
            currentIndex = model->index(start - 1, old.column(), parent);
        else if (model && end < model->rowCount(parent) - 1) // there are rows left below the change
            currentIndex = model->index(end + 1, old.column(), parent);
        else // there are no rows left in the table
            currentIndex = QModelIndex();


// посылаем СИГНАЛ !
emit q->currentChanged(currentIndex, old);
//------------------------------------------


        emit q->currentRowChanged(currentIndex, old);
        if (currentIndex.column() != old.column())
            emit q->currentColumnChanged(currentIndex, old);
    }
    // update selectionsx
    QModelIndex tl = model->index(start, 0, parent);
    QModelIndex br = model->index(end, model->columnCount(parent) - 1, parent);
    q->select(QItemSelection(tl, br), QItemSelectionModel::Deselect);
    finalize();
}


Это сообщение отредактировал(а) SABROG - 5.12.2007, 16:08


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
archimed7592
Дата 5.12.2007, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



SABROG, Вы, скорее всего, не совсем верно меня поняли, или, может быть, читали ветку через строку smile.

Цитата(SABROG @  5.12.2007,  15:39 Найти цитируемый пост)
Не надо путать сигналы со слотами.

Да я то, к слову, и не путаю - потому мне и не понятна сложившаяся ситуация smile.

Цитата(SABROG @  5.12.2007,  15:39 Найти цитируемый пост)
Сигналы "испускают" сами классы, нам не надо их звать, они сами придут. 

Да. Только маленькая поправочка, а точнее две:
1. сигналы испускают не классы, а объекты.
2. они испускают только сигналы, зарегестрированные в метаобъектной системе Qt.


SABROG, хорошо, теперь скажите мне на основании всего что Вы написали, откуда в этом классе взялся сигнал currentChanged?
Обратите внимание:
1. Речь о классе QTableView.
2. В классе QTableView нет сигнала currentChanged.
3. Programister0 выкинул из моего примера строки:
Цитата(archimed7592 @  2.12.2007,  20:44 Найти цитируемый пост)
signals:
    void currentChanged( const QModelIndex & current, const QModelIndex & previous );
т.е. сигнала как не было, так, он и не появился, ибо в метаобъектной системе его никто не зарегестрировал.
4. Ему якобы удалось соеденить с несуществующим сигналом какой-то слот и, якобы, он работает:
Цитата(Programister0 @  3.12.2007,  11:03 Найти цитируемый пост)
connect(MyTable,
          SIGNAL( currentChanged( const QModelIndex &, const QModelIndex &) ),
          this,
          SLOT( itemChange ( const QModelIndex &, const QModelIndex &) )
          );


Собственно, если поверить Programister0 на слово и выкинуть из 4-го пункта слова "якобы", то получается нечто, мне не понятное.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
SABROG
Дата 5.12.2007, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Под ООП в С++ я всегда подразумевал классы. Т.е. объектно ориентированное программирование - объект = класс.
Ну тогда стоит еще одно уточнение сделать, каждый объект на базе класса QObject. А таких там большинство.

Слот currentChanged там есть. А вот сигнала я такого тоже не нашел. Либо у него на самом деле ничего не работает, либо у нас разные версии Qt ;)


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
archimed7592
Дата 5.12.2007, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Что ж, раз по делу сказать нечего, то могу только лишь порекомендовать в будущем читать топики внимательней, особенно, если собираетесь  в них отвечать smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
SABROG
Дата 5.12.2007, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Пока автор не выложит исходники конечного рабочего варианта гадать бессмысленно. Но я так понял он нашел для себя ответ и тема ему больше не интересна.

Если смотреть исходный код QAbstractItemView (базовый класс для QTableView), то переопределенный currentChanged слот начнет срабатывать после вызова setModel.
И тогда этот код будет рабочим без определения своего сигнала в таком виде:

Код

class MyTableView
    :    public QTableView
{
    Q_OBJECT
public:
    MyTableView(QWidget *parent = 0)
        :    QTableView(parent)
    { }
    
protected slots:
    void currentChanged( const QModelIndex & current, const QModelIndex & previous )
    { 
/*
блок для действий
*/
QTableView::currentChanged(current, previous); // зовем оригинальный обработчик/слот
}
};



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Programister0
Дата 5.12.2007, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



Цитата

Но я так понял он нашел для себя ответ и тема ему больше не интересна

эта тема мне ещё интересна, 
я пока непонимаю откуда берутся сигналы типа: currentChanged, и
Цитата

какие ещё функции можно использовать как сигналы


Цитата

Пока автор не выложит исходники конечного рабочего варианта гадать бессмысленно

это в самом начале написал archimed7592 и оно работает хоть он в это и не верит: 
Код

#ifndef __myQTableView_H__
#define __myQTableView_H__

#include <QtGui/QTableView>

class myQTableView:
      public QTableView
{
    Q_OBJECT
  public:
    myQTableView(QWidget *parent = 0)
      :QTableView(parent)
    { }

  signals:
    void currentChanged( const QModelIndex & current, const QModelIndex & previous );

  protected slots:
  /* эти строки я выкинул т.к. компилятор отрицал возможность их компиляции
    void currentChanged( const QModelIndex & current, const QModelIndex & previous )
    { 
      QTableView::currentChanged(current, previous); 
      emit currentChanged(current, previous); 
    }
  */
};

//теперь я вставляю эту строку везде перед определением 
//Ui_* класса с QtableView 
#define QTableView  myQTableView   
//и эту в конце определения
#undef QTableView

#endif // __myQTableView_H__

далее в своих производных от Ui_* классах прописываю коннект:
Код

  connect(myTable1,  //экземпляр класса myQTableView
          SIGNAL( currentChanged( const QModelIndex &, const QModelIndex &) ),
          this,
          SLOT( myTable1Change ( const QModelIndex &, const QModelIndex &) )
          );
 
и myTable1Change - срабатывает как только меняется тек-я поз-я курсора!

Это сообщение отредактировал(а) Programister0 - 5.12.2007, 23:40
PM MAIL WWW ICQ Skype   Вверх
archimed7592
Дата 6.12.2007, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Цитата(SABROG @  5.12.2007,  19:49 Найти цитируемый пост)
И тогда этот код будет рабочим без определения своего сигнала в таком виде:

Вообще говоря, идея заключалась как раз таки в том, чтобы добавить сигнал и забыть о слове "наследование", а никак не наоборот.

Цитата(Programister0 @  5.12.2007,  23:39 Найти цитируемый пост)
/* эти строки я выкинул т.к. компилятор отрицал возможность их компиляции

А чуть выше ты говорил про совсем другие строки. Что ж... Теперь всё понятно smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
SABROG
Дата 6.12.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



"Безнаследственный" вариант я написал на первой странице. А вот кто пускает сигнал currecntChanged я так и не понял, если его нет в производных классах и он не переопределяется.
Если только каким-то странным образом слот currentChanged не превратился в сигнал.

Это сообщение отредактировал(а) SABROG - 6.12.2007, 16:43


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
archimed7592
Дата 6.12.2007, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Цитата(SABROG @  6.12.2007,  16:42 Найти цитируемый пост)
Если только каким-то странным образом слот currentChanged не превратился в сигнал.

Так и есть smile. Не знаю только, насколько документированно такое поведение...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Любитель
Дата 9.12.2007, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Цитата(archimed7592 @  6.12.2007,  17:08 Найти цитируемый пост)
Так и есть

Только это идеологически нехорошо smile Родительскую реализацию мокосгенрированные сигналы не вызывают. Да и плюс - вообщем-то что, конкретно есть реализация сигнала - никак не документируется, а про emit сказано лишь, что

Цитата

The C++ preprocessor changes or removes the signals, slots, and emit keywords


С точки зрения прямого чтения доков (о, как!) - возможно и первое smile

Наиболее правильный вариант - называть сигнал по-другому...

Другой вариант (решает проблему 1, но никак не 2  smile ) - вручную написать реализацию сигнала (как простого протектед-метода) и объект метаинформации. Если возьмётесь за этот вариант - минздрав предупреждал... 


--------------------
PM MAIL ICQ Skype   Вверх
Mnior
Дата 11.1.2008, 04:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 30.1.2007

Репутация: нет
Всего: нет



Прикольный баг, перенести функцию из slot в signal smile А если где-то и signal в slot  ... а потом ищи, чё это вызов сигнала зациклился, когдась всё вроде логично и не зацикленно, хотя на токое нарваться невероятно.

Интересно, а что если после переноса в сигналы сделать енто:
Код
connect(  //экземпляр класса myQTableView
                     this , SIGNAL( currentChanged( const QModelIndex &, const QModelIndex &) ),
        ((QTableView)this), SLOT  ( currentChanged( const QModelIndex &, const QModelIndex &) ) );
 smile

Да и вообще эта вся метаструктура в QT контролирует, что подаётся в slot() и signal(), а может там обыкновена функция и даже может и не бублик?
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1214 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.