• 7362阅读
  • 3回复

右键menu菜单的响应问题 [复制链接]

上一主题 下一主题
离线zonelight
 
只看楼主 倒序阅读 楼主  发表于: 2010-08-26
— 本帖被 XChinux 执行加亮操作(2010-09-02) —
上次在这里问了如何在tablewidget显示右键菜单的问题,现在已经显示出来了,但如何响应成了问题。


custom_tablewidget_site.h文件:
//这个就是新建的一个继承类,用法就是上次大家在这里教我的在UI界面下点我要显示右键的那个tablewidget再点提升把这个加进去。
#include <QTableWidget>
#include <QMenu>
class Custom_TableWidget_Site : public QTableWidget
{
    Q_OBJECT

public:
    explicit Custom_TableWidget_Site(QWidget *parent = 0);
    QAction *del;
    QAction *upload;
    QAction *download;
    QAction *newfile;
    QAction *newfolder;
    QAction *refresh;

private:

    void contextMenuEvent(QContextMenuEvent *);
};


custom_tablewidget_site.cpp文件:
#include "custom_tablewidget_site.h"
Custom_TableWidget_Site::Custom_TableWidget_Site(QWidget *parent) :
    QTableWidget(parent)
{

}

void Custom_TableWidget_Site::contextMenuEvent(QContextMenuEvent *)
{
    QCursor cur = this->cursor();
    QMenu *menu = new QMenu(this);
    del = new QAction(QObject::trUtf8("删除"),this);
    upload = new QAction(QObject::trUtf8("上传"),this);
    download = new QAction(QObject::trUtf8("下载"),this);
    newfile = new QAction(QObject::trUtf8("新建文件"),this);
    newfolder = new QAction(QObject::trUtf8("新建文件夹"),this);
    refresh = new QAction(QObject::trUtf8("刷新"),this);


    menu->addAction(del);
    menu->addAction(upload);
    menu->addAction(download);
    menu->addAction(newfile);
    menu->addAction(newfolder);
    menu->addAction(refresh);
    menu->exec(cur.pos());
}

最后我添加signal和slot响应的方式为:
mainwindow.cpp:
QObject::connect(ui->mytablewidget->newfile,SIGNAL(clicked()),this,SLOT(site_btn_newfile_slot()));
功能的意思是,如果点击鼠标右键,弹出的菜单里,点“新建文件”,那么mytablewidget里就会多出一行,但实际运行起来的时候一运行程序就不可预期的退出了。
可以排除其他问题,我另外有定义一个自定义的按钮控件,点击以后也是连到site_btn_newfile_slot()这个slot实现一模一样的功能,已经实现了。所以应该是右键这里的问题。
离线xtfllbl

只看该作者 1楼 发表于: 2010-08-27
请用你得qaction来connect,而不是什么ui->mytablewidget->newfile
上海欢迎您
离线zonelight
只看该作者 2楼 发表于: 2010-08-27
引用第1楼xtfllbl于2010-08-27 09:17发表的  :
请用你得qaction来connect,而不是什么ui->mytablewidget->newfile

不太明白,ui->mytablewidget->newfile本来就是一个qaction类型啊
离线zonelight
只看该作者 3楼 发表于: 2010-08-27
搞定了,是要把
    del = new QAction(QObject::trUtf8("删除"),this);
    upload = new QAction(QObject::trUtf8("上传"),this);
    download = new QAction(QObject::trUtf8("下载"),this);
    newfile = new QAction(QObject::trUtf8("新建文件"),this);
    newfolder = new QAction(QObject::trUtf8("新建文件夹"),this);
    refresh = new QAction(QObject::trUtf8("刷新"),this);
这些放到构造函数里
快速回复
限100 字节
 
上一个 下一个