gpt4 book ai didi

c++ - 如何在 QPushButtons 上使用 mousePressEvent

转载 作者:太空狗 更新时间:2023-10-29 21:45:21 29 4
gpt4 key购买 nike

我制作了一些 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。映射器允许您在单击其中一个按钮时检索相应按钮的标题。

关于c++ - 如何在 QPushButtons 上使用 mousePressEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17787624/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com