您的位置:首页 > 编程语言 > Qt开发

QT右键菜单

2016-02-17 10:09 357 查看
要在某一个窗体中添加右键菜单,比如在QTableView中添加,可以用两种方式。

方式1:使用它的signal函数customContextMenuRequested(QPoint pos),这个信号会在右键点击时发射,将这个信号连接到一个自定义的slot函数中,在这个函数中定义一个右键菜单QMenu,然后根据位置参数pos弹出这个菜单即可。

方式2:重写contextMenuEvent(QContextMenuEvent *event)事件函数,函数中同样使用QMenu来实现。

信号/槽机制是QT的一个中心特征,也是Qt与其他工具包的最不相同的部分,下面是方式1实现一个右键菜单,函数中代码同样适用于方式2:

void MainWindow::on_tableView_customContextMenuRequested(QPoint pos)
{
QTreeWidgetItem* curItem=ui->treeWidget->itemAt(pos);  //获取当前被点击的节点
if(curItem==NULL)return;  //这种情况是右键的位置不在treeItem的范围内,即在空白位置右击
if(0==curItem->data(0,Qt::UserRole))//data(...)返回的data已经在之前建立节点时用setdata()设置好
{
QMenu *popMenu =new QMenu(this);//定义一个右键弹出菜单

popMenu->addAction(ui->action_newDB);//往菜单内添加QAction   该action在前面用设计器定义了
popMenu->addAction(ui->action_openDB);
popMenu->addAction(ui->action_delDB);
popMenu->exec(QCursor::pos());//弹出右键菜单,菜单位置为光标位置
}
else
{
QMenu *popMenu =new QMenu(this);//定义一个右键弹出菜单

popMenu->addAction(ui->action_newTable);//往菜单内添加QAction,该action在前面用设计器定义了
popMenu->addAction(ui->action_openTable);
popMenu->addAction(ui->action_designTable);
popMenu->exec(QCursor::pos());//弹出右键菜单,菜单位置为光标位置
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: