如何在QPushButtons上使用mousePressEvent
how to use mousePressEvent on QPushButtons
我制作了一些QPushButton,比如QPushButton**btn,我想知道用户何时使用QMouseEvent点击其中一个按钮。这是代码,但这个想法根本不起作用。有什么想法吗??
void Game::mousePressEvent(QMouseEvent*ev){
if(ev->button() == Qt::LeftButton)
{
btn[ev->x()][ev->y()].setStyleSheet("background-color : black;");
}
else
{
btn[ev->x()][ev->y()].setStyleSheet("background-color : red;");
}
其他部分用于右键单击这是生成按钮的代码
void Game::MakeButton()
{
btn = new ApButton*[column];
hrztl = new QHBoxLayout[column];
hrztl->setSpacing(0);
for(int i=0; i<column;i++)
{
btn[i] = new ApButton[row];
for(int j=0; j<row; j++)
{
btn[i][j].setRowCol(i,j);
btn[i][j].setFixedSize(50,50);
hrztl[i].addWidget(&btn[i][j]);
}
ui->MainLayout->addLayout(&hrztl[i]);
}
ui->MainLayout->setSpacing(0);
}
ApButton是一个继承QPushButton 的类
这是QSignalMapper的一个很好的使用示例,如下所示:http://qt-project.org/doc/qt-5.0/qtcore/qsignalmapper.html#details
ButtonWidget::ButtonWidget(QStringList texts, QWidget *parent)
: QWidget(parent)
{
signalMapper = new QSignalMapper(this);
QGridLayout *gridLayout = new QGridLayout;
for (int i = 0; i < texts.size(); ++i) {
QPushButton *button = new QPushButton(texts[i]);
connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
signalMapper->setMapping(button, texts[i]);
gridLayout->addWidget(button, i / 3, i % 3);
}
connect(signalMapper, SIGNAL(mapped(QString)),
this, SIGNAL(clicked(QString)));
setLayout(gridLayout);
}
在该示例中,每个按钮都由其标题标识为QString。映射器允许您在单击其中一个按钮时检索相应按钮的标题。
切换
Game::mousePressEvent(QMouseEvent *e)
至
ApButton::mousePressEvent(QMouseEvent *e)
因为您正在尝试实现按钮的按下事件。如果你只想有按下按钮的那一刻,而不想改变按钮的行为,请使用SIGNAL/SLOT连接,而不是重新实现事件(添加到你的创建中):
connect(btn[i][j], SIGNAL(pressed()), this, SLOT(slotButtonPressed());
void Game::slotButtonPressed(){
//doSomething
}
如果您需要在一个方法中识别多个按钮,请使用QButtonGroup或QSignalMapper,或者使用QObject::sender(),但这有时可能很棘手。
我以前也遇到过类似的情况。。我有一个Q对话框,我不得不添加一些QPushButton。。那么我需要知道用户按下了哪个按钮。。所以我需要这样的东西:
connect( btn, SIGNAL( clicked(int) ),
this, SLOT( handle(int) ));
例如,具有被点击按钮的id的信号槽连接和用于处理点击的函数。每个按钮的功能都是相同的,并且由于id的原因可以处理特定的按钮。
实现这一点非常简单,将QPushButton子类化,添加一个id和一个新信号。。
希望能有所帮助!
如果Apbutton继承了QPushButton,为什么不连接到clicked()?
然后可以调用QObject::sender()
插槽上:
ApButton *but = dynamic_cast<ApButton*>QObject::sender()
if(but)
{
but->setStyleSheet("background-color : black;");
}
以获取单击的按钮并设置其样式表
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- Qt - 为什么我无法在主窗口中为我的自定义按钮触发 mousePressEvent
- 如何在qquickwindow中正确覆盖mousePressEvent?
- 在Qt中实现mousePressEvent和setDragMode
- 在 MousePressEvent 中使用 QDialog
- 在mousePressEvent()中更改QWidget父级不起作用
- 如何在mousepressEvent()函数中显示像素坐标,然后如何在每次单击鼠标时在paintGL()函数中将其使用
- 在mousePressEvent期间,Qt5/C++释放鼠标
- 如何在QPushButtons上使用mousePressEvent
- mousePressEvent不能与简单的QGraphicsView一起工作
- 即使QTabletEvent被接受,QWidget的mousePressEvent也会被调用
- 为什么总是在mouseDoubleClickEvent之前调用mousePressEvent