• 10823阅读
  • 8回复

关于鼠标点右键弹出菜单的问题! [复制链接]

上一主题 下一主题
离线zonelight
 
只看楼主 正序阅读 楼主  发表于: 2010-08-23
— 本帖被 XChinux 执行加亮操作(2010-09-02) —
我知道这样的:

void MainWindow::contextMenuEvent(QContextMenuEvent *)

{

    QCursor cur=this->cursor();

    QMenu *menu=new QMenu(this);

    menu->addAction(“aaaa”);

    menu->addAction("bbbb");

    menu->exec(cur.pos());

}

不过这个是整个MainWindow的,我现在想做的是,在一个table中的某一行点右键,然后弹出菜单,做关于这一行的操作,比如删除啦什么的,或者关于这个table的操作,比如刷新整个table什么的,这样的要怎么去实现?
离线zonelight
只看该作者 8楼 发表于: 2010-08-24
已经知道原因了,CPP里居然忘了写构造函数
离线zonelight
只看该作者 7楼 发表于: 2010-08-24
我这么做:
.h文件

class Custom_TableWidget : public QTableWidget
{
    Q_OBJECT

public:
    explicit Custom_TableWidget(QWidget *parent = 0);
    ~Custom_TableWidget();

private:

    void contextMenuEvent(QContextMenuEvent *);


};

.cpp文件:

void Custom_TableWidget::contextMenuEvent(QContextMenuEvent *)
{
    QCursor cur=this->cursor();
    QMenu *menu=new QMenu(this);
    menu->addAction(trUtf8("删除"));
    menu->addAction(trUtf8("新建"));
    menu->exec(cur.pos());

}


之后按照你说的在我的界面ui的那个table上promote to这个custom的table,但总是build不过,居然提示:: error: collect2: ld returned 1 exit status这样的错。试了很多次,clean过了rebuild过了重启过了都不行,只要把我的custom的promote卸载掉然后把.h和.cpp里的注释掉就不会出错,具体来说是~Custom_TableWidget()析构的这样注释掉就不会出这个错,但是当然会出别的错。。。。。
离线xtfllbl

只看该作者 6楼 发表于: 2010-08-24
引用第5楼zonelight于2010-08-23 19:55发表的  :
是不是这个意思,继承一个tablewidget然后重载contextMenuEvent之后,在.cpp里定义一个tablewidget?我还是不明白,提升法依然不明白,插件法似乎就是把重载后的tablewidget当成一个自定义控件,不过这样的话就需要定义一个,我原来在design的ui环境下画的那个table就不行了啊

当你继承一个table之后,在ui你原来的table上右键,会发现有个提升选项,你选择你继承的那个table就可以了。
上海欢迎您
离线zonelight
只看该作者 5楼 发表于: 2010-08-23
是不是这个意思,继承一个tablewidget然后重载contextMenuEvent之后,在.cpp里定义一个tablewidget?我还是不明白,提升法依然不明白,插件法似乎就是把重载后的tablewidget当成一个自定义控件,不过这样的话就需要定义一个,我原来在design的ui环境下画的那个table就不行了啊
离线dbzhang800

只看该作者 4楼 发表于: 2010-08-23
引用第2楼zonelight于2010-08-23 17:26发表的  :
是不是我在mainwindow.h里来一个 class table:Qtablewidget 这样?


可以放mainwindows.h 里面,但最好还是用单独的 table.h table.cpp

引用第2楼zonelight于2010-08-23 17:26发表的  :
但是这样的话又怎么和ui里我的那个table产生联系,好像是无关的东西吧?

看qt designer的manual,用提升法或插件法
离线zonelight
只看该作者 3楼 发表于: 2010-08-23
不明白具体的代码如何来写。。
离线zonelight
只看该作者 2楼 发表于: 2010-08-23
对不起我不太明白,在哪里继承,比如我的那个table是MainWindow里面的,从mainwindow.h里看到有这样的定义
class MainWindow: QMainWindow
{

}

是不是我在mainwindow.h里来一个 class table:Qtablewidget 这样?
但是这样的话又怎么和ui里我的那个table产生联系,好像是无关的东西吧?
离线xtfllbl

只看该作者 1楼 发表于: 2010-08-23
继承一个qtablewidget(qtableview),然后和你在mainwidow中的方法一样,实现就可以了。
上海欢迎您
快速回复
限100 字节
 
上一个 下一个