查看完整版本: [-- 关于QTableWidget右键菜单异常退出的问题。 --]

QTCN开发网 -> Qt基础编程 -> 关于QTableWidget右键菜单异常退出的问题。 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

lwei24 2021-03-10 10:13

关于QTableWidget右键菜单异常退出的问题。

各位大佬,请问有没有碰到在QTableWidget右键菜单时,异常退出并且菜单也没有出现呢?
如下是我的代码,还请各位大佬指点一下到底哪里错了,在此不胜感激!


myWidget::myWidget(QWidget *parent)
    : QWidget(parent)
{
    m_pTableWidget = NULL;
    initUi();
}
void myWidget::initUi()
{
        m_pTableWidget = new QTableWidget(this);
    m_pTableWidget->resize(this->width()*90/100, this->height()*45/100);
    m_pTableWidget->move(this->width()*5/100, this->height()*10/100);

    //设置表格属性
    m_pTableWidget->setColumnCount(4);
    m_pTableWidget->horizontalHeader()->setVisible(false);
    m_pTableWidget->verticalHeader()->setVisible(false);
    m_pTableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    m_pTableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);

    m_pTableWidget->horizontalHeader()->setStretchLastSection(true);
    m_pTableWidget->verticalHeader()->setDefaultSectionSize(10);
    m_pTableWidget->setFrameShape(QFrame::NoFrame);
    m_pTableWidget->setFocusPolicy(Qt::NoFocus);
    m_pTableWidget->setShowGrid(false);
    m_pTableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
    m_pTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
    m_pTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
    m_pTableWidget->setStyleSheet("selection-background-color:lightblue;"); //設置選中背景色
    m_pTableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{background:skyblue;}"); //設置表頭背景色
    m_pTableWidget->horizontalHeader()->setHighlightSections(false);
    m_pTableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//自适应无效

    //m_pTableWidget->setItemDelegate(new myItemDelegate2(0));

    this->stackUnder(m_pTableWidget);
    m_pTableWidget->setColumnCount(4);
    m_pTableWidget->setRowCount(2);

    for (int row = 2; row < m_pTableWidget->rowCount(); ++row)//隐藏2行后的行
        m_pTableWidget->setRowHidden(row, true);

    QFont font;
    font.setFamily("SimHei");
    font.setPixelSize(14);
    font.setBold(false);
    QTableWidgetItem *pTitleText = new QTableWidgetItem;
    pTitleText->setFont(font);
    pTitleText->setText(TABLE_ENCRYPT_TIP_INFO);
    m_pTableWidget->setSpan(0, 0, 2, 4);
    m_pTableWidget->setItem(0, 0, pTitleText);
    connect(m_pTableWidget, SIGNAL(itemDoubleClicked(QTableWidgetItem *)), this, SLOT(slotItemDoubleClicked(QTableWidgetItem*)));

    m_pMainLayout = new QVBoxLayout;//(this);
    m_pMainLayout->addWidget(m_pTableWidget);
    setLayout(m_pMainLayout);

    this->m_pTableWidget->setAcceptDrops(false);
    this->setAcceptDrops(true);
    
    //创建快捷键菜单:此处添加会点击右键,出现异常退出。
    this->m_pTableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
    m_pMenu = new QMenu();//(this);
    connect(this, &myWidget::customContextMenuRequested, this, &myWidget::slotCustomContextMenuRequested);

}

void myWidget::slotCustomContextMenuRequested(const QPoint &pos)
{
    initAction();
    m_pMenu->exec(mapToGlobal(pos));
}

void  myWidget::initAction()
{
    QAction  *actPast = new  QAction("粘贴");
    m_pMenu->addAction(actPast);
    connect(actPast, SIGNAL(triggered()), this, SLOT(slotActionPast()));
    m_pMenu->addSeparator();
}



20091001753 2021-03-10 12:10
[attachment=22293]

zy1233 2021-03-10 16:08
  this->stackUnder(m_pTableWidget);有问题,你的widget和table是父子关系

fsx92 2021-03-10 17:13
异常退出,一般考虑是指针的问题。

lwei24 2021-03-12 10:14
20091001753:[图片] (2021-03-10 12:10) 

多谢指点!

lwei24 2021-03-12 10:15
zy1233:  this->stackUnder(m_pTableWidget);有问题,你的widget和table是父子关系 (2021-03-10 16:08) 

请问它们不可以是父子关系吗?

lwei24 2021-03-12 10:16
fsx92:异常退出,一般考虑是指针的问题。 (2021-03-10 17:13) 

好的,多谢给我一个思考的方向!

fsu0413 2021-03-12 18:24
其实用不着这么复杂,直接addActions,然后用setContextMenuPolicy(Qt::ActionsContextMenu);
我觉得你的问题是menu添加的本身就不对,具体怎么不对我也没细看。

zy1233 2021-03-15 11:17
lwei24:请问它们不可以是父子关系吗? (2021-03-12 10:15) 

void QWidget::stackUnder(QWidget *w)
Places the widget under w in the parent widget's stack.
To make this work, the widget itself and w must be siblings.

只能是兄弟关系

lwei24 2021-03-25 15:06
fsu0413:其实用不着这么复杂,直接addActions,然后用setContextMenuPolicy(Qt::ActionsContextMenu);
我觉得你的问题是menu添加的本身就不对,具体怎么不对我也没细看。 (2021-03-12 18:24) 

好吧,多谢指点,那我再检查检查!

lwei24 2021-03-25 15:07
zy1233:void QWidget::stackUnder(QWidget *w)
Places the widget under w in the parent widget's stack.
To make this work, the widget itself and w must be siblings.
....... (2021-03-15 11:17) 

哦哦,多谢指点!


查看完整版本: [-- 关于QTableWidget右键菜单异常退出的问题。 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled