Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: zoro86 от Октябрь 07, 2010, 08:02



Название: tableWidgetItem->flags()???
Отправлено: zoro86 от Октябрь 07, 2010, 08:02
Я использую QTableWidget в приложении для отображения списка платежей... данные в нем не должны редактироваться но при этом строка из 4 полей должна выделятся...

начальные установки для QTableWidget.
Код:
void MainWindow::setSettingForOperationList()
{

    QStringList stritemTable;

    stritemTable << linguisMap[QString("Operator_%1").arg(lang)]
                 << linguisMap[QString("Account_%1").arg(lang)]
                 << linguisMap[QString("Amount_%1").arg(lang)]
                 << linguisMap[QString("Status_%1").arg(lang)];

    int cols = 4;

    lstOperationView->setColumnCount(cols);
    lstOperationView->setHorizontalHeaderLabels(stritemTable);
    lstOperationView->horizontalHeader()->setStretchLastSection(true);
    lstOperationView->setSelectionBehavior(QAbstractItemView::SelectRows);

    this->setWidthForOperationList();
}


вот вставляю новую строку и допустим добавляю в него один tableWidgetItem...
Код:
    lstOperationView->insertRow(0);
    int i = lstOperationView->rowCount();
    QTableWidgetItem *tableWidgetItem = new QTableWidgetItem(QString("%1").arg(i));
    lstOperationView->setRowHeight(0,20);
    tableWidgetItem->setFlags(Qt::ItemIsEditable);
    lstOperationView->setItem(0,0,tableWidgetItem);

при этом при щелчке на 0-й элемент QTableWidget то есть те которые находятся в первом столбце он не выделяется и не редактируется, какой то серинкий.... при щелчке на элементы в следующих столбцах строка выделяется крое 0-го элемента...

потом попробовал..
Код:
tableWidgetItem->setFlags(tableWidgetItem->flags() | Qt::ItemIsEditable);

он стал редактируемым.... и строка полностью подсвечивается(что и следовало)

Так вот мне необходимо сделать следующее...

  • - выделять строку при выборе хотя бы одного элемента при этом чтобы они не редактировались
  • - при щелчке правой кнопкой мыши должно вызываться менюшка с действиями(типа переправить, копировать, распечатать чек)
  • - сделать скрытый tableWidgetItem которая будет содержать транзакцию платежа, чтобы по нему можно было личится в базу...

по форуму я много чего нашел интересного но вот касающиеся этого конкретно не нашел..... если кто знает помогите.. ???


Название: Re: tableWidgetItem->flags()???
Отправлено: zoro86 от Октябрь 07, 2010, 08:17
нашел как делать не редактируемыми

lstOperationView->setEditTriggers(QAbstractItemView::NoEditTriggers);


Название: Re: tableWidgetItem->flags()???
Отправлено: Aleksey_Zh от Октябрь 07, 2010, 08:21
Привет. Может быть стоит глянуть в сторону делегатов?

ЗЫ Qt::ItemIsEditable - лучше убрать :) нередактируемости этот флажок не поможет
ЗЗЫ Если таблица создается в конструкторе - можно ведь в selectionBehavior поставить вид выделения - строкой...
а насчет скрытого tableWidget'a - нужно создать пустой столбец с нулевой длиной и запретить его изменение (изменение размера и позиции)


Название: Re: tableWidgetItem->flags()???
Отправлено: zoro86 от Октябрь 07, 2010, 08:34
но вот это у меня уже есть....
Код:
lstOperationView->setSelectionBehavior(QAbstractItemView::SelectRows);

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

и меню бы кто нить помог реализовать :-\


Название: Re: tableWidgetItem->flags()???
Отправлено: Aleksey_Zh от Октябрь 07, 2010, 08:53
С менюшками еще не разбирался, а насчет делегатов - в примерах \qt\demos\books


Название: Re: tableWidgetItem->flags()???
Отправлено: zoro86 от Октябрь 07, 2010, 08:54
Пока добился следующего...

Код:
void MainWindow::setSettingForOperationList()
{

    QStringList stritemTable;

    stritemTable << linguisMap[QString("Operator_%1").arg(lang)]
                 << linguisMap[QString("Account_%1").arg(lang)]
                 << linguisMap[QString("Amount_%1").arg(lang)]
                 << linguisMap[QString("Status_%1").arg(lang)]
                 << "Transaction"
                 << "status";

    int cols = 6;

    lstOperationView->setColumnCount(cols);
    lstOperationView->setHorizontalHeaderLabels(stritemTable);
    lstOperationView->horizontalHeader()->setStretchLastSection(true);
    //Прячем колонку Transaction
    lstOperationView->setColumnHidden(4,true);
    //Прячем колонку status
    lstOperationView->setColumnHidden(5,true);
    lstOperationView->setSelectionBehavior(QAbstractItemView::SelectRows);
    lstOperationView->setEditTriggers(QAbstractItemView::NoEditTriggers);

    this->setWidthForOperationList();
}

осталось сделать делегат... для строки... ща рассмотрю примерчик... и менюшку прикрутить...


Название: Re: tableWidgetItem->flags()???
Отправлено: zoro86 от Октябрь 08, 2010, 05:56
Так со всем разобрался осталось сделать выделение строк при наведении мыши на элементы скажем светло берюзовым цветом... у кого какие идеи по поводу этого??


Название: Re: tableWidgetItem->flags()???
Отправлено: zoro86 от Октябрь 08, 2010, 06:27
Делаю вот такой стиль... для выделения ячейки..

Код:
QTableWidget::item:hover { 

        background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,

                stop: 0 #fffaff, stop: 0.4 #fff0c0,

                stop: 0.5 #fff0c0, stop: 1.0 #d0d9f0);

        border: 1px solid #a4a063;

}

а как сделать чтобы вся стока при наведении выделялась??


Название: Re: tableWidgetItem->flags()???
Отправлено: spirits25 от Апрель 11, 2012, 14:47

а как сделать чтобы вся стока при наведении выделялась??

Ответ нашёлся? "как сделать чтобы вся стока при наведении выделялась?"