基金网站建设需求书,小企业一键做网站,wordpress主题消失,wordpress副标题标签提要
继承于QPushButton的自定义按钮类#xff0c;其右键弹出一个弹框#xff0c;创建多个这样的自定义按钮在窗口中#xff0c;每一时刻只显示一个右键弹出框#xff0c;避免同一时刻#xff0c;多个按钮右键弹出弹出框后#xff0c;未及时关闭弹出框导致的同一时刻有多…提要
继承于QPushButton的自定义按钮类其右键弹出一个弹框创建多个这样的自定义按钮在窗口中每一时刻只显示一个右键弹出框避免同一时刻多个按钮右键弹出弹出框后未及时关闭弹出框导致的同一时刻有多个弹出框。
实现
1.在自定义的按钮里创建按钮时在构造函数中传入参数id用于区别不同的按钮id是唯一的。
myButton(int index,QWidget *parent nullptr);上述的构造函数中参数index实际上就是按钮的id,创建按钮的时候传入然后创建类成员变量来保存这个id.
int m_index;//按钮的下标用于区别点击的是哪个按钮2.每个按钮自带一个对话框在自定义按钮的构造函数中创建但是先不显示该对话框在按钮上点击右键时显示弹出框。
myButton::myButton(int index,QWidget *parent)
:QPushButton(parent),m_index(index),m_isLongPress(false)
{
// initBtnStyle();//在自定义控件的本身设置样式也可以在调用类中设置自定义控件的样式也行m_configName new configBtnNameDialog(this);connect(m_configName,configBtnNameDialog::signalSave,this,myButton::setSceneBtnName);
}重写鼠标点击事件在点击右键的时候显示弹出框
void myButton::mousePressEvent(QMouseEvent *e)
{if(e-button() Qt::RightButton){//显示对话框showEditNameDlg();}QPushButton::mousePressEvent(e);
}
这样就会出现创建几个按钮后每在一个按钮上点击右键就会弹出一个对话框但是要想同一时刻只显示一个右键弹出框就需要在每次点击右键时将之前已经显示的对话框隐藏掉。 3.采用信号槽来实现上述同一时刻只显示一个对话框。 在显示右键弹出框后发送一个信号到按钮所在的父窗口并通过这个信号将按钮的id传递到都窗口这样父窗口就知道了那个按钮的右键弹出框已经显示了再在每次点击右键对话框显示前发送信号到按钮的父窗口告诉父窗口需要隐藏之前已经显示的对话框这样按钮的父窗口可以根据之前传过去已经显示对话框的按钮的id给改id的按钮发送信号告知该按钮应该右键弹出框。
void myButton::showEditNameDlg()
{if(m_configName ! nullptr){m_configName-setGeometry(cursor().pos().x(),cursor().pos().y() - 10,m_configName-size().width(),m_configName-size().height());m_configName-show();emit signalShowDlgBtnId(m_id);//发送显示弹出框的按钮的id}
}按钮的父窗口保存已经显示弹出框的按钮的id
void SystemScenenForm::slot_showDlgBtnId(int id)
{m_showDlgBtnId id;
}每次点击按钮之前发信号给按钮的父窗口使之前已经显示的右键弹出框隐藏。
void myButton::mousePressEvent(QMouseEvent *e)
{if(e-button() Qt::RightButton){//若之前有弹出框存在则先隐藏之前的弹出框emit sigHideShowDlg();showEditNameDlg();}QPushButton::mousePressEvent(e);
}父窗口接收信号发送信号到已经显示右键弹出框的按钮
void SystemScenenForm::slot_hideShowDlg()
{emit sigHideBtnShowDlg(m_showDlgBtnId);
}
让其隐藏已经显示的右键弹出框。
void myButton::slot_hideBtnShowDlg(int id)
{if(m_id id){m_configName-hide();}
}上述就可以解决一个自定义按钮类右键出弹出框创建多个这样的按钮后点击右键忘记关闭弹出框又去在另一个按钮的右键上点击这样会在同一时刻出多个弹出框的问题使同一时刻只有一个弹出框显示。