Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: semantic от Январь 13, 2012, 08:21



Название: table ячейки строки в виде одной ячейки
Отправлено: semantic от Январь 13, 2012, 08:21
как при наведении курсором на ячейку таблицы, выделять строку целиком, т.е. нужно визуально все ячейки, представлять как одну.


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: alexman от Январь 13, 2012, 09:19
Можно отлавливать движение мыши, определять номер строки, void QTableView::selectRow ( int row ) [slot].


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: Bepec от Январь 13, 2012, 09:25
Отлавливать наведение на ячейку.
Или использовать CSS, там есть данный функционал.

Свойство selection mode позволяет выделять целиком всю строку (прорисовка остаётся та же, но выделение идёт на строку)

PS мб я не понял вопроса, ты хочешь просто выделять строку целиком, или же ты хочешь перерисовывать все ячейки в 1 строку, без разграничителей?


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: semantic от Январь 13, 2012, 09:29
Отлавливать наведение на ячейку.
Или использовать CSS, там есть данный функционал.

Свойство selection mode позволяет выделять целиком всю строку (прорисовка остаётся та же, но выделение идёт на строку)

PS мб я не понял вопроса, ты хочешь просто выделять строку целиком, или же ты хочешь перерисовывать все ячейки в 1 строку, без разграничителей?

да да, нужно без ограничения делать, но к примеру при двойном клике на строку редактировать первую ячейку строки, во как нужно. такой функционал наблюдается в TC(командер)


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: alexman от Январь 13, 2012, 09:40
Не знаю можно ли разбить как то ячейку в таблице, но объединить можно... поколдуй с void QTableView::setSpan ( int row, int column, int rowSpanCount, int columnSpanCount ).

Еще можно более экзотически: при наведении на строку поверх таблицы рисовать виджет размеров строки (соблюдая стиль ...) ну и там нужный текст.

Цитировать
как при наведении курсором на ячейку таблицы, выделять строку целиком, т.е. нужно визуально все ячейки, представлять как одну.
Не расскажешь зачем это надо?


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: Bepec от Январь 13, 2012, 09:43
Тогда устанавливай свойство selection behavior. ( в 1 сообщении ошипся.)

Будет выделяться вся строка. А вот чтобы редактировать только 1 ячейку, нужен будет делеган с редактором.

table_->setShowGrid(false) скроет границы между ячейками.


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: semantic от Январь 13, 2012, 10:59
Тогда устанавливай свойство selection behavior. ( в 1 сообщении ошипся.)
да это при клике выделяется строка, но нужно еще и при наведении выделять, с mouse ничего не нашел
Цитировать
Будет выделяться вся строка. А вот чтобы редактировать только 1 ячейку, нужен будет делеган с редактором.
можно тут подробнее?
Цитировать
table_->setShowGrid(false) скроет границы между ячейками.
и опять таки, при выделении строки границы видны.


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: semantic от Январь 13, 2012, 11:31
с выделение разобрался. on_tableWidget_cellEntered

другие вопросы в силе


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: Bepec от Январь 13, 2012, 12:21
Насчёт выделение - в поиск.
Насчёт делегата - в поиск (наводка
Код:
QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex &  index ) const;
)

Темы поднимались не раз и там всё разжёвано.


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: semantic от Январь 13, 2012, 12:26
Насчёт выделение - в поиск.
Насчёт делегата - в поиск (наводка
Код:
QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex &  index ) const;
)
Темы поднимались не раз и там всё разжёвано.

делегат нашел, пасиб на доводку.

а если нужно при двойном щелчке запретить редактирование ячейки, а допустим при нажатии на кнопку открыть доступ к редактированию, я так понимаю делегат запрещает полностью редактирование.


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: stima от Январь 13, 2012, 12:38
Дам более расширенную подсказку (по крайней мере я реализовываю так):

Код:
pseudo code

void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    if ( option.state == QStyle::State_MouseOver )
    {
         emit setRowHovered(true, index.row);
    }
    else
    {
          emit setRowHovered(false, index.row);
    }
}

QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex &  index ) const; ---- вызываеться когда клиент начал редактирование.

Переопределить метод Q*Widget
Код:
pseudo code

void mouseDoubleClickEvent ( QMouseEvent * event )
{
   event->ignore();
}

void keyPressEvent(QKeyEvent *event)
{
   if ( event == myEvent ) {
       celectedRow->activate();
   } else {
    parent(event);
  }

}
}

Я бы сделал чтото в этом духе.


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: Bepec от Январь 13, 2012, 12:41
Делегат есть всегда :) Вызвать стандартный делегат тоже можно всегда ;)

Вызов редактора делегата производится по
Код:
EditTriggers
- там уже можно определить реагировать на чтото, или игнорить.

PS а вообще делегат такая прекрасная штука, что подстраивается легко ^^


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: semantic от Январь 13, 2012, 13:06
пока не допонял ваши мысли, вот делегат на запрет редактирования колонок
Цитировать
class Delegate : public QItemDelegate
{
    Q_OBJECT
public:
    Delegate(QObject * parent = 0) : QItemDelegate(parent) {

    }
    virtual QWidget * createEditor ( QWidget *, const QStyleOptionViewItem &,
                                     const QModelIndex &) const
    {
        return 0;
    }
};
но как сделать, чтоб при нажатии кнопки(определенной) редактирование ячейки выделенной колонки стало возможно


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: Bepec от Январь 13, 2012, 13:13
Вопрос какую кнопку вы хотите? Имеете в виду любую кнопку на клавиатуре(X,Z,Y)? Или же кнопку/галку/виджет которую поставите на форму?


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: semantic от Январь 13, 2012, 13:17
Вопрос какую кнопку вы хотите? Имеете в виду любую кнопку на клавиатуре(X,Z,Y)? Или же кнопку/галку/виджет которую поставите на форму?
и то и другое, и с формы редактировать и при помощи горячих клавиш.


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: stima от Январь 13, 2012, 13:18
Это не безопасный код. Вы возвращаете 0, но потом можете забыть куда и зачем его возвращаете (да и механика скрыта, может сам Qt гдето обратиться к 0 а Вы будете гадать где же это сегфолт), а во вторых Вам же всетаки нужно редактировать колонки, просто откинуть дабл клик мышкой, а это лиш через mouseDoubleClickevent.

Код:
    virtual QWidget * createEditor ( QWidget *, const QStyleOptionViewItem &,
                                     const QModelIndex &) const
    {
        return 0;
    }


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


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: Bepec от Январь 13, 2012, 13:22
Горячими клавишами, мышкой, кнопками... Оо... Вы хоть понимаете, что сейчас говорите кашу -
Цитировать
мне нужен велосипед без колёс, что летает над землёй, чтоб броня бы как у танка, ещё плавник как у акулы, и мех рыжий как у лисы, и чтоб ещё когда рядом человек, оно должно играть симфонию баха на скрипках, причём выполненных из натуральных пород деревьев.

Определитесь что вам надо. Напишите на листочке/блокноте. Отчеркните, что ненадо. Подумайте, мб вы что-то забыли? Добавьте. А после раздумий пришлите сюда всё, что получилось.

1 рецепт на всё вам никто не даст. А вот по частям разобьете и объясните - поможем.


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: semantic от Январь 13, 2012, 13:26
Горячих клавиш, мышкой, кнопки Оо... Вы хоть понимаете, что сейчас говорите кашу -
Цитировать
мне нужен велосипед без колёс, что летает над землёй, чтоб броня бы как у танка, ещё плавник как у акулы и мех рыжий как у лиса и чтоб ещё когда рядом человек, оно бы ещё и играло симфонию баха на скрипках, причём выполненных из натуральных пород деревьев.

Определитесь что вам надо. Напишите на листочке/блокноте. Отчеркните что ненадо. Подумайте, мб вы что-то забыли? Добавьте. А после раздумий пришлите сюда всё, что получилось.
почему каша редактировать ячейку нужно тока этими способами:
1. кнопкой на форме.
2. сочетанием определенных клавиш
и что тут странного вы увидели? нормальный подход. или вы считаете, что в word нажать на copy или сочетание ctrl+c это изврат. я не согласен


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: semantic от Январь 13, 2012, 13:29
п.с. Напииште последовательно на бумажке, что Вам надо и последовательность действий пользователя)), будет легче понять, что переорпеделять и что добавлять/урезать.

я и пишу, что описанными двумя способами(см. выше) разрешить редактирование, а по двойному щелчку запретить.  Вроде все логично и понятно пишу, откуда стока вопросов=)


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: Bepec от Январь 13, 2012, 13:30
В таблице, выбрав нужную ячейку, нажимать сочетание клавиш чтобы отредактировать её? Бред.

Возьмите Word/Excel/Explorer/Total Commander/Windows. Простейшие функции - простые кнопки. Сочетания идут, когда уже стандартные нельзя использовать. Чем вас двойной щелчок и Enter не устраивает?

Насчёт кнопки вопросов нет. Кнопкой на форме обычно и дублируют, чтоб ясно было - тут можно редактировать ;)


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: stima от Январь 13, 2012, 13:35
Исходя из ваших слов вам просто нужно:

Код:
void mouseDoubleClick(QMouseEvent *e) {
    e->ignore();
}


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: semantic от Январь 13, 2012, 13:37
В таблице, выбрав нужную ячейку, нажимать сочетание клавиш чтобы отредактировать её? Бред.
Возьмите Word/Excel/Explorer/Total Commander/Windows. Простейшие функции - простые кнопки. Сочетания идут, когда уже стандартные нельзя использовать.
ну да тока в TC F2 и кнопка переименования, у меня аналагично.
Цитировать
Чем вас двойной щелчок и Enter не устраивает?
Насчёт кнопки вопросов нет. Кнопкой на форме обычно и дублируют, чтоб ясно было - тут можно редактировать ;)
а то, что, по двойному клику будут другие действия.


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: semantic от Январь 13, 2012, 13:42
Исходя из ваших слов вам просто нужно:

Код:
void mouseDoubleClick(QMouseEvent *e) {
    e->ignore();
}
это у tablewidget?


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: _OLEGator_ от Январь 13, 2012, 13:48
Код
C++ (Qt)
void QAbstractItemView::setEditTriggers ( EditTriggers triggers )

с нужными флагами:

Код
C++ (Qt)
QAbstractItemView::NoEditTriggers
QAbstractItemView::EditKeyPressed

Открыть редактирование по надобности

Код
C++ (Qt)
void QAbstractItemView::edit ( const QModelIndex & index )

Оно?


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: Bepec от Январь 13, 2012, 14:06
Цитировать
Вызов редактора делегата производится по
Код:
Код:
EditTriggers
[/color][/size]
 - там уже можно определить реагировать на чтото, или игнорить.

Уже писал, но видно пропустил ТС.

Почитайте про него в ассистенте, OLEGator любезно предоставил пример.



Название: Re: table ячейки строки в виде одной ячейки
Отправлено: semantic от Январь 16, 2012, 08:32
Все спаси получилось
 
Код:
   
    ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
.........................................
void MainWindow::editTableCell(){
    QModelIndex index = ui->tableWidget->model()->index(ui->tableWidget->currentRow(),0,QModelIndex());
    ui->tableWidget->edit(index);
}
так сделал=)
один остался вопрос при выделении строки, нужно убрать сетку, т.е. чтоб не было разделителей, как?


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: alexman от Январь 16, 2012, 09:24
5-ый пост глянь.


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: Bepec от Январь 16, 2012, 09:37
Ты сначала читай, потом пробуй. А потом делаешь скрин и показываешь, как у тебя получилось, и как тебе хочется, ок?


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: semantic от Январь 16, 2012, 12:51
объединение работает, НО тогда исчезают записи объедененных ячеек, а это мне не надо


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: Bepec от Январь 16, 2012, 13:55
Нарисуй что ты хочешь и что у тебя получается сейчас (т.е. красной жирной линией обведи то, что хочешь убрать). Тогда мы возможно поймём тебя.


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: semantic от Январь 16, 2012, 14:15
Нарисуй что ты хочешь и что у тебя получается сейчас (т.е. красной жирной линией обведи то, что хочешь убрать). Тогда мы возможно поймём тебя.
да тут просто вот есть срока таблицы

|name|date|bla-bla|data|

нужно убрать при наведении курсором границы ячеек(сделать одну ячейку), сделал
Код:
void MainWindow::on_tableWidget_entered(const QModelIndex &index)
{
    ui->tableWidget->setSpan(index.row(),0,1,4);
}
и когда навожу получаю вот такой вид
|name|
остальное исчезает.
или можно еще сделать так, что при наведении курсором, ячейки не выделялись


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: Bepec от Январь 16, 2012, 14:29
setShowGrid ( bool show )?


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: semantic от Январь 16, 2012, 14:42
setShowGrid ( bool show )?
да это работает скрывает секу, но при наведении на строку, всеравно видно границы ячеек.


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: Bepec от Январь 16, 2012, 15:37
Какие тебе границы видны блин )
делаешь скриншот мляха муха, и обводишь границы, которые у тебя видны.


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: semantic от Январь 17, 2012, 07:22
Какие тебе границы видны блин )
делаешь скриншот мляха муха, и обводишь границы, которые у тебя видны.

ааааа, вот скрин, видете там 4 ячейки, между ними видны границы разделения, но их не надо чтоб было видно, понимаете? setSpan не помогает, вернее помогает, но тогда при выделении запись остается только в первой ячейки, понимаете? как еще подробнее можно объяснить=)
Может стилями как-то можно это дело исправить?


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: Bepec от Январь 17, 2012, 08:43
Зафиг тебе тогда 4 ячейки?


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: semantic от Январь 17, 2012, 08:53
Зафиг тебе тогда 4 ячейки?

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


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: Bepec от Январь 17, 2012, 08:59
Помоему ты сейчас фигней страдаешь :D
У тебя итак есть единая строка. Хочешь визуально хорошо - создавай свою собственную модель-view, делегат и прочая.


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: semantic от Январь 17, 2012, 09:06
Помоему ты сейчас фигней страдаешь :D
У тебя итак есть единая строка. Хочешь визуально хорошо - создавай свою собственную модель-view, делегат и прочая.

да уж нет не фигня, так надо.
Свою модель создавать из одного каприза не хочется, в остальном tablewidget усраивает


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: alexman от Январь 17, 2012, 09:22
Оставляй QTableWidget, но установи свой делегат. Попробуй у него метод
Код:
void QItemDelegate::updateEditorGeometry ( QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index ) const [virtual]
переопределить.


Название: Re: table ячейки строки в виде одной ячейки
Отправлено: stima от Январь 17, 2012, 15:30
Код:
Q*View::item { border: none; }
попробуй