Qt — MacBook с сенсорной панелью «правый клик»

Я пытаюсь как-то определить, когда QPushButton щелкают правой кнопкой мыши. У меня есть MacBook, и мне интересно, если решение представлено в этом сообщение от Мд. Минхазул Хак должен работать и для меня, если я использую тачпад с принудительным касанием. Я скопировал код, который он представил (создал дополнительный класс QRightClickButton), но, к сожалению, он не работает для меня.

Это мое подключения ()

connect(board->dis_board[i][j], SIGNAL(rightClicked()), this, SLOT(flag()));

куда доска это объект класса

class Board
{
private:
int size;
int bombs;
int places;
public:
std::vector<std::vector<QPushButton*>> board;
std::vector<std::vector<QPushButton*>> dis_board;
explicit Board(int size, int bombs);
void move(int x, int y);
void flag(int,int);
};

Конструктор доска объект класса

Board::Board(int size, int bombs) : size(size), bombs(bombs), places(size*size)
{

board.resize(size);
dis_board.resize(size);
for (int i=0; i<size; ++i)
{
board[i].resize(size);
dis_board[i].resize(size);

for(int j=0; j<size; ++j)
{
board[i][j] = new QPushButton();
dis_board[i][j] = new QPushButton();
board[i][j]->setText(" ");
dis_board[i][j]->setText(" ");
}
}
QTime time = QTime::currentTime();
qsrand((uint)time.msec());
for (int i=0; i<bombs;)
{
int x = qrand() % ((size - 1 + 1) - 0) + 0;
int y = qrand() % ((size - 1 + 1) - 0) + 0;
if(board[x][y]->text() != "x")
{
board[x][y]->setText("x");
++i;
}
}
}

И здесь у вас есть заголовок класса реального окна (я думаю, что так оно и называется, поскольку я новичок в Qt)

#ifndef GAME_H
#define GAME_H

#include <qrightclickbutton.h>
#include <QMainWindow>
#include <vector>
#include <QGridLayout>
#include "board.h"#include <signal.h>
#include <QMouseEvent>

namespace Ui {
class Game;
}

class Game : public QMainWindow
{
Q_OBJECT

public:
explicit Game(QWidget *parent = 0, int x=0, int y=0);
~Game();

private slots:
void flag();

private:
Ui::Game *ui;
int size;
int bombs;
Board *board;
QGridLayout *grid;
};

#endif // GAME_H

И последнее, что я считаю важным, — это конструктор окна.

Game::Game(QWidget *parent, int size, int bombs) :
QMainWindow(parent),
ui(new Ui::Game),
size(size),
bombs(bombs)
{
ui->setupUi(this);
grid = new QGridLayout();
board = new Board(size, bombs);

ui->verticalLayout->addLayout(grid);
for(int i=0; i<size; ++i)
{
for(int j=0; j<size; ++j)
{
grid->addWidget(board->dis_board[i][j], i, j);
connect(board->dis_board[i][j], SIGNAL(rightClicked()), this, SLOT(flag()));
}
}
}

Game::~Game()
{
delete ui;
}

void Game::flag()
{
QMessageBox msg;
msg.setText("WARNGING");
msg.exec();
QPushButton *buttonSender = qobject_cast<QPushButton*>(sender());
for(unsigned long x=0; x<board->dis_board.size(); ++x)
{
for(unsigned long y=0; y<board->dis_board.size(); ++y)
{
if(board->dis_board[x][y] == buttonSender)
{
board->flag(x,y);
return;
}
}
}
}

Также нажал () СИГНАЛ (левая кнопка) отлично работает с этими кнопками.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]