как у QWidget убрать блокировку получения событий мыши если уже кнопка мыши уже нажата над другим виджетом
есть группа объектов отнаследованных от QWidget которые расположены на QGridLayout. Я нажимаю над одним из них кнопку мыши(допустим левую) и у этого виджета меняется цвет, после я с зажатой кнопкой веду курсор на другой виджет и хочу чтобы у него тоже поменялся цвет, но этого не происходит. Я пытался переопределять события event(QEvent *e), mouseMoveEvent, pressEvent, и проверять какая кнопка мыши нажата, но это не помогает т.к. при нажатии кнопки мыши происходит запрет на отправку событий мыши для всех остальных объектов, я пробовал также вызывать releaseMouse() в данных переопределённых функциях, но и это не помогло. В итоге пришлось сделать так:
void Block :: enterEvent(QEvent *e)
{
if(qApp->keyboardModifiers() == Qt::AltModifier
|| qApp->mouseButtons() == Qt::LeftButton)
{
// тут меняем цвет блока на нужный
}
}
Этот способ работает, но всё же хотелось бы узнать как-то можно это сделать через зажимание кнопки мыши и без использование клавиатуры?
Ответы (1 шт):
Если это то, что вам нужно, то я сделал так; разместил на MainWindow QGridLayout в который поместил виджеты, для примера, типа QFrame
:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
void MainWindow::mouseMoveEvent(QMouseEvent *evt)
{
QMainWindow::mouseMoveEvent(evt);
// Получаем виджет под курсором
QWidget* w = this->childAt(evt->pos());
// Если виджет наследуется от QFrame, то
if (dynamic_cast<QFrame*>(w) != nullptr) {
// Устанавливаем цвет в красный
w->setStyleSheet("background-color: red");
}
}