crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Маркер в таблице...
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Алексей1153 Дата 6.5.2011, 19:20
 
Цитата(fortero @ 6.5.2011, 6:43) *
Я не совсем чувствую грань когда следует в QT пользоватся динамической памятью а когда нет...

речь не про Qt, а про C++ , кстати


Цитата(fortero @ 6.5.2011, 6:43) *
В каких случаях Куча актуальна будет?


например, если бы был массив большого размера. Локальные переменный размещаются на стеке, а стек имеет ограниченный размер. Если стек переполнен, то программа в лучшем случае просто аварийно завершится.
Также, для массивов с изменяемым размером. Контейнеры Qt и STL тоже внутри себя используют кучу для хранения данных. По последней причине, кстати, контейнеры можно спокойно использовать как локальные переменные, так как, по сути, "локальное" тело переменной - несколько указателей и счётчиков количества элементов. А данные лежат на куче
fortero Дата 6.5.2011, 3:43
 
Цитата(Алексей1153 @ 5.5.2011, 20:42) *
об операторе new подробнее, чем любая книжка по C++ я рассказать не сумею. Если коротко - это работа с кучей, new выделяет память из кучи под переменную, delete возвращает. Автоматически вызываются конструктор и деструктор соответственно

В данном случае наличие new/delete совершенно необязательно, так как автоматическая локальная переменная выполнит всё то же самое. Но если хочется, можно оставить и так, как у тебя ))


В каких случаях Куча актуальна будет?
Я не совсем чувствую грань когда следует в QT пользоватся динамической памятью а когда нет...
Алексей1153 Дата 5.5.2011, 20:42
  об операторе new подробнее, чем любая книжка по C++ я рассказать не сумею. Если коротко - это работа с кучей, new выделяет память из кучи под переменную, delete возвращает. Автоматически вызываются конструктор и деструктор соответственно

В данном случае наличие new/delete совершенно необязательно, так как автоматическая локальная переменная выполнит всё то же самое. Но если хочется, можно оставить и так, как у тебя ))
fortero Дата 5.5.2011, 1:08
 
Цитата(Алексей1153 @ 4.5.2011, 21:00) *
1) волшебные цифры лучше заменить на мнемоники (Qt::Key_Return и Qt::Key_Enter)
2) new, по моему, тут не нужен (вернее, можно без кучи обойтись):
QList<QTableWidgetItem *>  tList(mtab->selectedItems());
if(!tList.empty())
{
    dubleClic_slot(tList.last()->row());
}


А если можно поподробней о new, просто у меня не совсем ещё сформировалось понимание когда он нужен а когда нет?
Почему Вы считаете что тут он не нужен прокаментируйте пожалуйста.
Спасибо за внимание!
Алексей1153 Дата 4.5.2011, 21:00
  1) волшебные цифры лучше заменить на мнемоники (Qt::Key_Return и Qt::Key_Enter)
2) new, по моему, тут не нужен (вернее, можно без кучи обойтись):
QList<QTableWidgetItem *>  tList(mtab->selectedItems());
if(!tList.empty())
{
    dubleClic_slot(tList.last()->row());
}
fortero Дата 2.5.2011, 22:01
  Кажеться победил:
void TableCl::keyPressEvent(QKeyEvent *pe){
    if ((pe->key() == 16777220) | (pe->key() == 16777221))
    {
    QList<QTableWidgetItem *>  *tList = new QList<QTableWidgetItem *>(mtab->selectedItems());
              if(!tList->empty())
    this->dubleClic_slot(tList->last()->row());
    delete tList;
    }
}


Silver47 покритекуйте, может что-то не так?
fortero Дата 2.5.2011, 19:49
  Одна проблема, у меня не QTableView а QTableWidget, а функций индекс там нет...
silver47 Дата 2.5.2011, 6:05
  гм... Наверное будет работать тоже самое:
QModelIndex index(QTableView::curentIndex());  вместо QTableView - подставьте свою таблицу
if(!index.isValid)) return; // выход если индекс не корректен

QString Str;
Str = index.sibling(index.row(), index.column()).data(Qt::EditRole).toString(); // поместили в переменную Str текст выделенной ячейки
fortero Дата 2.5.2011, 2:26
 
Цитата(silver47 @ 21.4.2011, 5:06) *
Цитата(fortero @ 20.4.2011, 23:14) *
А ещё вопрос, а если мне надо по клавише Enter вызывать сигнал, как это организовать с клавишами я пока не работал ещё??? То есть мне нужно когда я стою на нужной строке и жму клавишу Enetr происходило действие...


1. Изменения которые необходимо внести в заголовочный файл того виджета, на котором таблица расположена:
protected:
    virtual void keyPressEvent(QKeyEvent *pe);


2. Теперь создадим описанный нами метод:
void Widget::keyPressEvent(QKeyEvent *pe){    
    if ((pe->key() == 16777220) | (pe->key() == 16777221)) this->someSlot(); // Enter
}


16777220 и 16777221 - это коды двух клавиш Enter. Чтобы узнать какой код у кнопки, поставьте вывод qDebug() << pe; в самом начале метода. Для того, чтобы знать нажаты ли кнопки-модификаторы (Alt; Ctrl; Shift), нужно проверить вот такое вот условие:

if (pe->modifiers() & Qt::ShiftModifier) // зажат шифт
if (pe->modifiers() & Qt::AltModifier) // зажат альт
if (pe->modifiers() & Qt::CtrlModifier) // зажат Ctrl


Опять же, все тот же, Макс Шлее страница 259


Спасибо, это очень интересно, но а как мне в слот передать информацию о месте нахождения маркера, когда мышей я кликал то я использовал вот такой вариант:
connect(mtab, SIGNAL(cellDoubleClicked(int, int)), this, SLOT(dubleClic_slot(int )));

А тут как быть, как узнать отмеченный маркер, причём последний, ведь случайно можно две строки выделить!
Спасибо за внимание!

silver47 Дата 21.4.2011, 5:06
 
Цитата(fortero @ 20.4.2011, 23:14) *
А ещё вопрос, а если мне надо по клавише Enter вызывать сигнал, как это организовать с клавишами я пока не работал ещё??? То есть мне нужно когда я стою на нужной строке и жму клавишу Enetr происходило действие...


1. Изменения которые необходимо внести в заголовочный файл того виджета, на котором таблица расположена:
protected:
    virtual void keyPressEvent(QKeyEvent *pe);


2. Теперь создадим описанный нами метод:
void Widget::keyPressEvent(QKeyEvent *pe){    
    if ((pe->key() == 16777220) | (pe->key() == 16777221)) this->someSlot(); // Enter
}


16777220 и 16777221 - это коды двух клавиш Enter. Чтобы узнать какой код у кнопки, поставьте вывод qDebug() << pe; в самом начале метода. Для того, чтобы знать нажаты ли кнопки-модификаторы (Alt; Ctrl; Shift), нужно проверить вот такое вот условие:

if (pe->modifiers() & Qt::ShiftModifier) // зажат шифт
if (pe->modifiers() & Qt::AltModifier) // зажат альт
if (pe->modifiers() & Qt::CtrlModifier) // зажат Ctrl


Опять же, все тот же, Макс Шлее страница 259
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 1:59