我正試圖讓多個(3個)自定義背景關系選單發揮作用,每個都是針對不同的表視圖。
我的代碼在除錯時作業正常,但在發布時我無法獲得不同的背景關系選單--我設法獲得的最好結果是第一個選單作業(而其他選單被禁用),或者是流離失所的選單(即選單相對于螢屏的左上角而不是游標處偏移)。
代碼:
void DisplayWidget::Init()
{
//ParameterData Table
pLabel_Param = new QLabel(tr("PARAMETER DATABASE") )。
pTableW_Param = new QTableWidget(this)。
//EmuNameIn 表
pLabel_EmuNameIn = new QLabel(tr("EMULATOR NAME IN") )。
pTableW_EmuNameIn = new QTableWidget(this)。
//EmuNameOut表。
pLabel_EmuNameOut = new QLabel(tr("EMULATOR NAME OUT")>。)
pTableW_EmuNameOut = new QTableWidget(this)。
//設定背景關系選單。
pTableW_Param->setContextMenuPolicy(Qt::CustomContextMenu)。
connect(pTableW_Param, SIGNAL(customContextMenuRequested(QPoint))。SLOT(customMenuRequested_Param(QPoint))。
pTableW_EmuNameIn->setContextMenuPolicy(Qt::CustomContextMenu)。
connect(pTableW_EmuNameIn, SIGNAL(customContextMenuRequested(QPoint))。SLOT(customMenuRequested_EmuNameIn(QPoint))。
pTableW_EmuNameOut->setContextMenuPolicy(Qt::CustomContextMenu)。
connect(pTableW_EmuNameOut, SIGNAL(customContextMenuRequested(QPoint))。SLOT(customMenuRequested_EmuNameOut(QPoint))。
}
void DisplayWidget::customMenuRequested_Param(QPoint pos)
{
if(!pTableW_Param || (sizeOfTable_Param == 0) return;
QModelIndex index = pTableW_Param->indexAt(pos)。
QMenu *menuParam = new QMenu(this)。
if(IsEmuValid()) menuParam->addAction(pAct_AddParam)。
menuParam->addAction(pAct_SearchTable_Param);
menuParam->popup(pTableW_Param->viewport()->mapToGlobal(pos)) 。
}
void DisplayWidget::customMenuRequested_EmuNameIn(QPoint pos)
{
if(!pTableW_EmuNameIn || !IsEmuValid() || (sizeOfTable_EmuNameIn == 0) return;
QModelIndex index = pTableW_EmuNameIn->indexAt(pos)。
QMenu *menuNameIn = new QMenu(this)。
menuNameIn->addAction(pAct_DeleteFromNameIn)。
menuNameIn->addAction(pAct_Toggle_InToOut)。
menuNameIn->addAction(pAct_SearchTable_EmuNameIn)。
menuNameIn->addAction(pAct_SortTable_EmuNameIn);
menuNameIn->popup(pTableW_EmuNameIn->viewport()->mapToGlobal(pos)) 。
}
void DisplayWidget::customMenuRequested_EmuNameOut(QPoint pos)
{
if(!pTableW_EmuNameOut || !IsEmuValid() || (sizeOfTable_EmuNameOut == 0) return;
QModelIndex index = pTableW_EmuNameOut->indexAt(pos)。
QMenu *menuNameOut = new QMenu(this)。
menuNameOut->addAction(pAct_DeleteFromNameOut)。
menuNameOut->addAction(pAct_Toggle_OutToIn)。
menuNameOut->addAction(pAct_SearchTable_EmuNameOut)。
menuNameOut->addAction(pAct_SortTable_EmuNameOut)。
menuNameOut->popup(pTableW_EmuNameOut->viewport()->mapToGlobal(pos)) 。
我試著尋找/搜索同樣的問題,但未能解決這個問題。
uj5u.com熱心網友回復:
我已經找到了一種方法來使它作業,盡管我仍然不明白為什么我的代碼會失敗。
使其作業的方法是將以下內容換掉:
menuNameOut->popup(pTableW_EmuNameOut-> viewport()->mapToGlobal(pos))。)
menuNameIn->popup(pTableW_EmuNameIn->viewport()->mapToGlobal(pos)) 。
menuParam->popup(pTableW_Param->viewport()->mapToGlobal(pos)) 。
for:
menuNameOut->exec(QCursor::pos() )。
menuNameIn->exec(QCursor::pos();
menuParam->exec(QCursor::pos()) 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/310191.html
標籤:
