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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: вопрос по QTable  (Прочитано 6743 раз)
norD
Гость
« : Май 21, 2005, 23:00 »

Добрый день. Мне нужно изменить порядок переключения между элементами таблицы (по-умолчанию сверху-вниз, а я хочу слева направо). В доках советуют переписывать функции QTable::activateNextCell() , но что-то у меня не получается. Как это сделать?
Записан
BaltikS
Гость
« Ответ #1 : Май 23, 2005, 11:56 »

Во первых описать новый класс от QTable. Затем переопределить обработку нажатия клавиш, выставляя нужной ячейке фокус. :lol:
Записан
norD
Гость
« Ответ #2 : Май 23, 2005, 21:05 »

Ну с наследованием от QTable понятно, а как обработчик клавиш пределать (например для Ентер)? Так будет работать?:
Код:

MyClass:: event (QEvent *event)
{
    if(e->type()== QEvent::KeyPress)
        {
            QKyEvent* keyEvent = (QKeyEvent*) e;
            if(keyEvent->key() == Key_Enter)
              {
                   //здесь переключаемся на новую ячейку
                  return true;  
                }
  return QWidget:: event(event);
}

И у меня еще вопрос мне надо изменять размерность таблицы и я
скрываю строки и столбцы и подстраиваю размер таблицы с помощью
SizeHint, но остается белый фон (который находился под ними). Как от него избавится?
Записан
norD
Гость
« Ответ #3 : Май 24, 2005, 22:35 »

Так, ну с пустым местом от таблицы разобрался-- надо было не скрывать столбцы и строки, а удалять. Возможно когда просто они просто скрываются, то SizeHint() "думает", что таблица не менялась и оставляет все как было. А вот с переопределением обработки нажатия клавиш фигня получается. Написал я вот такой код:
Код:

bool MyTable:: event(QEvent *event)
{
if(event->type()== QEvent::KeyPress)
        {
           QKeyEvent* keyEvent = (QKeyEvent*) event;
           if(keyEvent->key() == Key_Enter)
             {
   int nCurRow= currentRow ();
   int nCurCol= currentColumn();
   endEdit ( nCurRow, nCurCol, true, false );
      if((nCurRow==MyTable::Rows-1)&&(nCurCol==MyTable::Columns-1))
{
setCurrentCell (0,0);
return true;
}
if(nCurCol==MyTable::Columns-1)
{
nCurRow++;
nCurCol=-1;
}
setCurrentCell (nCurRow,++nCurCol );

                return true;  
              }
}
  return QWidget:: event(event);
}
 

И  теперь, когда фокус ввода находится в таблице при нажатии Enter
он действительно переходит между ячейками слева направо, только вот когда я изменяю содержимое ячейки и нажимаю Enter фокус как и раньше движется сверху вниз :twisted:
Записан
BaltikS
Гость
« Ответ #4 : Май 26, 2005, 11:58 »

Я сделал так:
bool MyTable::eventFilter(QObject *target, QEvent *event)
{
    if (event->type() ==QEvent::KeyPress)
    {
        QKeyEvent *keyEvent = (QKeyEvent *)event;
        if (keyEvent->key() == 4100)    // если нажата клавиша ENTER
       {
            setCurrentCell(currentRow(), currentCol()+1);
            return true;
       }
    }
...........................................................................................
}
______________________________________________________
Работает на 100%. Таким образом можно переопределить любую клавишу. Да и обратите внимание, коды клавиш ENTER левого и правого - не совпадают!  :lol: [/i][/b]
Записан
norD
Гость
« Ответ #5 : Май 26, 2005, 21:44 »

Спасибо за вариант, я уже по другому сделал: оставил в покое Enter (и правый и левый)-- пусть себе сверху вниз гуляет, а просто начал табом пользоваться Веселый Теперь у пользователя есть выбор либо с Enterom сверху-вниз или Tabом слева- направо Крутой Думаю препод, который сие чудо будет приниать останется доволен.
У меня вот другой вопрос возник: чтобы мое приложение на других машинах запускать нужна qt-334.dll, можно ли использовать какие-нибудь урезанные версии? А то у меня приложение 80кб и библиотека 5мб. Или хотя бы как эту библиотеку внутрь exe пихнуть, чтобы отдельно два файла не таскать?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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