• 1971阅读
  • 10回复

关于QTableWidget右键菜单异常退出的问题。 [复制链接]

上一主题 下一主题
离线lwei24
 

只看楼主 倒序阅读 楼主  发表于: 2021-03-10
各位大佬,请问有没有碰到在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

只看该作者 1楼 发表于: 2021-03-10
1条评分威望+1
lwei24 威望 +1 - 2021-03-12
(づ ̄ 3 ̄)づ
离线zy1233

只看该作者 2楼 发表于: 2021-03-10
  this->stackUnder(m_pTableWidget);有问题,你的widget和table是父子关系
1条评分好评度+1
lwei24 好评度 +1 - 2021-03-12
离线fsx92

只看该作者 3楼 发表于: 2021-03-10
异常退出,一般考虑是指针的问题。
1条评分好评度+1
lwei24 好评度 +1 - 2021-03-12
离线lwei24

只看该作者 4楼 发表于: 2021-03-12
回 20091001753 的帖子
20091001753:[图片] (2021-03-10 12:10) 

多谢指点!
离线lwei24

只看该作者 5楼 发表于: 2021-03-12
回 zy1233 的帖子
zy1233:  this->stackUnder(m_pTableWidget);有问题,你的widget和table是父子关系 (2021-03-10 16:08) 

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

只看该作者 6楼 发表于: 2021-03-12
回 fsx92 的帖子
fsx92:异常退出,一般考虑是指针的问题。 (2021-03-10 17:13) 

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

只看该作者 7楼 发表于: 2021-03-12
其实用不着这么复杂,直接addActions,然后用setContextMenuPolicy(Qt::ActionsContextMenu);
我觉得你的问题是menu添加的本身就不对,具体怎么不对我也没细看。
1条评分好评度+1
lwei24 好评度 +1 - 2021-03-25
离线zy1233

只看该作者 8楼 发表于: 2021-03-15
回 lwei24 的帖子
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.

只能是兄弟关系
1条评分好评度+1
lwei24 好评度 +1 - 2021-03-25
离线lwei24

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

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

只看该作者 10楼 发表于: 2021-03-25
回 zy1233 的帖子
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) 

哦哦,多谢指点!
快速回复
限100 字节
 
上一个 下一个