右键单击QTreeView项

时间:2015-05-27 06:46:14

标签: c++ qt

我想从QTreeView的条目生成右键菜单。目前我尝试了这个,但我不希望整个treeView生成右键单击然后我过滤鼠标所在的位置。我希望从条目中生成信号。

connect(mtreeView, SIGNAL(customContextMenuRequested(const QPoint&)),
        this, SLOT(showContextMenu(const QPoint&)));

谢谢!

3 个答案:

答案 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

因此,他们无法发出任何信号