izquierdo - qpushbutton qt
Cómo detectar la tecla modificadora con el clic del mouse en Qt (5)
El estado de las teclas modificadoras del teclado se puede encontrar llamando a la función modificadores () heredada de QInputEvent.
Tengo un QTableWidget
y me gustaría que presionar CTRL mientras QTableWidget
clic en el encabezado de una columna marca toda la columna. Obtener el índice de la columna no es un problema ya que hay una señal de sección presionado que me da el índice actual de la columna en la que se hace clic. ¿Cómo puedo obtener el estado de los modificadores de teclado cuando se hace clic en una columna?
Esto funciona para mí
if (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier) == true) {
Pruebe QApplication::keyboardModifiers() que siempre está disponible
En Qt 5, prueba QGuiApplication::keyboardModifiers() .
Puede usar QGuiApplication::queryKeyboardModifiers()
que es más fácil de usar:
if(QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ShiftModifier))
{
// Do a few things
}
esto es realmente molesto, tengo que instalar un eventFilter y eliminar la sección Manipulador presionado
ui->tableWidget->horizontalHeader()->viewport()->installEventFilter(this);
Dentro de eventFilter puedo verificar si se presionó una tecla como
bool MainWindow::eventFilter(QObject *object, QEvent *event)
{
if(event->type() == QEvent::MouseButtonPress)
{
if(Qt::ControlModifier == QApplication::keyboardModifiers())
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
if(mouseEvent)
{
if(mouseEvent->button()== Qt::LeftButton)
{
ui->tableWidget->selectColumn(ui->tableWidget->itemAt(mouseEvent->pos())->column());
return true;
}
}
}
}
return QWidget::eventFilter(object,event);
}