• 12417阅读
  • 11回复

如何给tablewidget整行条目加右键菜单? [复制链接]

上一主题 下一主题
离线edsionte
 
只看楼主 倒序阅读 楼主  发表于: 2011-04-26
大家好,


我现在要为数据建立一个tablewidget,现在已经可以正行选择,
现在的需求是单击鼠标右键很能弹出一个菜单,
请问这里涉及到那些技术?需要什么信号?


谢谢。
离线ppdayz

只看该作者 1楼 发表于: 2011-04-26
下面是我给treeWidget加的右键。。。楼主参考下,改下就可以了
  1. private slots:
  2. on_treeWidget_customContextMenuRequested(QPoint pos);

  1. ui->treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
  2. void Composer::on_treeWidget_customContextMenuRequested(QPoint pos)
  3. {
  4.     currentItem = ui->treeWidget->itemAt( pos );
  5.     if( currentItem == 0)
  6.         return;
  7.     QMenu *treeWidgeMenu = new QMenu(ui->treeWidget);
  8.     treeWidgeMenu->addAction(ui->actionS_rename);
  9.     treeWidgeMenu->addAction(ui->actionCollpase_Rooms);
  10.     treeWidgeMenu->addAction(ui->actionUpdate_Driver);
  11.     treeWidgeMenu->addSeparator();
  12.     treeWidgeMenu->addAction(ui->actionS_delete);
  13.     treeWidgeMenu->exec(QCursor::pos());
  14. }
[ 此帖被ppdayz在2011-04-26 11:30重新编辑 ]
离线edsionte
只看该作者 2楼 发表于: 2011-04-26
回 1楼(ppdayz) 的帖子
谢谢。我运行成功了。
请问这个信号为何就能一次选定一行呢。
我重载了contextMenuEvent(QContextMenuEvent* e)这个函数后,点击整个widget任何一处都出现这个右键菜单。
离线ppdayz

只看该作者 3楼 发表于: 2011-04-27
这个只是出右键菜单
选择整行是
tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
离线edsionte
只看该作者 4楼 发表于: 2011-05-01
回 3楼(ppdayz) 的帖子
我现在有如下需求:

我点击tablewidget的一个verticalHeader,然后就对这个列进行排序。

排序函数有sortItems,请问这个itemHeader的点击事件用那个信号获取?

谢谢。
离线ppdayz

只看该作者 5楼 发表于: 2011-05-01

horizontalHeaderItemhorizontalHeaderItemhorizontalHeaderItem
verticalHeaderItem123
verticalHeaderItem456
verticalHeaderItem789
是点哪个排序?
[ 此帖被ppdayz在2011-05-01 14:47重新编辑 ]
离线edsionte
只看该作者 6楼 发表于: 2011-05-01
点击 horizontalHeaderItem 排序。刚说错了。sorry。

我刚看QTableWidget中关于Item的信号都是数据Item的,并没有针对表头。

麻烦解答 一下。。
离线ppdayz

只看该作者 7楼 发表于: 2011-05-01
这个没有写过,不过这里有2个思路,你去参考下

一是QHeadView 的事件,
QTableWidget *table = new .....
QHeadView *head = tanle->horizontalHeader();

还有就是连接信号槽
connect(tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(mySort(int)));
离线edsionte
只看该作者 8楼 发表于: 2011-05-01
回 7楼(ppdayz) 的帖子
在你回复之前,我也是按照你说的那个思路去做,但是出现了一下问题:

每次点击一个表头后可以排序,稍候点击其他表头即不再起作用了。

是不是排序后就不能再排序了?
离线ppdayz

只看该作者 9楼 发表于: 2011-05-01
你可以试着打印出来那个槽函数是否被执行到
离线edsionte
只看该作者 10楼 发表于: 2011-05-01
回 9楼(ppdayz) 的帖子
解决了。

我的槽函数中使用sortByColumn函数,如果指定了order,就会出现上面我说的情况。
而我是使用没有order参数的那个sortByColumn函数,就正常排序,并且点击一下是升序排序,再次点击就是降序排序

虽然解决了,不过不知道为什么指定order就会出现上面的问题。
离线ppdayz

只看该作者 11楼 发表于: 2011-05-01
void QTableView::sortByColumn(int column)
{
    Q_D(QTableView);
    if (column == -1)
        return;
    d->model->sort(column, d->horizontalHeader->sortIndicatorOrder());
}

void QTableView::sortByColumn(int column, Qt::SortOrder order)
{
    Q_D(QTableView);
    d->horizontalHeader->setSortIndicator(column, order);
    sortByColumn(column);
}

void QHeaderView::setSortIndicator ( int logicalIndex, Qt::SortOrder order )
Sets the sort indicator for the section specified by the given logicalIndex in the direction specified by order, and removes the sort indicator from any other section that was showing it.

就是这个函数,让你的下来的排序不行了
快速回复
限100 字节
 
上一个 下一个