我想从QTreeView的条目生成右键菜单。目前我尝试了这个,但我不希望整个treeView生成右键单击然后我过滤鼠标所在的位置。我希望从条目中生成信号。
connect(mtreeView, SIGNAL(customContextMenuRequested(const QPoint&)),
this, SLOT(showContextMenu(const QPoint&)));
谢谢!
答案 0 :(得分:8)
方法1
最好使用ContextMenuEvent而不是MouseReleaseEvent,因为它是一种更便携的方式来触发上下文菜单,支持在某些平台上的可访问性等等......右键单击不是打开上下文菜单的唯一方法
如果您不想继承QTreeView,请从主窗口安装一个事件处理程序:
ui->myTreeView->installEventFilter(this);
然后在主窗口filterEvent
bool MainWindow::eventFilter(QObject *target, QEvent *event)
{
if (target == ui->myTreeView)
{
QContextMenuEvent* m = dynamic_cast<QContextMenuEvent*>(event);
if (event->type() == QEvent::ContextMenu && e!=0)
{
//Create context menu here
return true;
}
}
return false;
}
方法2
将上下文菜单模式更改为信号:
ui->myTreeView->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->myTreeView, SIGNAL(customContextMenuRequested(QPoint)),
this, SLOT(treeCustomMenu(QPoint)));
然后实现你的插槽:
void MainWindow::treeCustomMenu(const QPoint & pos)
{
//Implement your menu here using myTreeView->itemAt(pos);
}
答案 1 :(得分:2)
我所做的是覆盖I want to insert that records in table 'STATUS_CHANGE'(this is blank table)
and table structure given below.
CREATE TABLE "STATUS_CHANGE"
(
APPLICANT_ID NUMBER,
PARTNER_ID NUMBER,
OLD_APP_STATUS_ID NUMBER(3,0),
NEW_APP_STATUS_ID NUMBER(3,0),
MODIFIED_ON DATE
) ;
Using trigger code is given below .
CREATE OR REPLACE TRIGGER TRI_STATUS_CHANGE
INSTEAD OF INSERT OR UPDATE ON STATUS_ID_VEW
BEGIN
INSERT INTO STATUS_CHANGE(APPLICANT_ID, PARTNER_ID,OLD_APP_STATUS_ID,NEW_APP_STATUS_ID,MODIFIED_ON)
VALUES (:old.APPLICANT_ID,:old.PARTNER_ID, :old.APPLICANT_STATUS_ID, :new.APPLICANT_STATUS_ID, datetime('now'));
END;
/
并手动检查。
mouseReleaseEvent
答案 2 :(得分:0)
条目的含义在Qt中不由QObject
表示。只有项目模型是QObject
,但Qt项目/视图系统中的各个树节点不是QObject
。
因此,他们无法发出任何信号