В QAbstractItemView
есть сигнал activated
который генерируется если произошло нажатие на элемент. На этот сигнал у меня подвешен слот onItemActivated
:
void MyWidget::onItemActivated()
{
doSmth();
}
Как сделать так, чтобы при нажатии на элемент я мог проверить какие-то условия(или например вывести диалог для подтверждения пользователем) и в случае необходимости отменить активацию элемента. То есть чтобы currentIndex
не изменился.
Я пробовал использовать QItemSelectionModel
:
MyWidget::MyWidget()
{
...
_ui.treeSignalsView->setModel( _treeModel );
_ui.treeSignalsView->setSelectionModel( new QItemSelectionModel( _treeModel ) );
connect( _ui.treeSignalsView->selectionModel(), &QItemSelectionModel::currentChanged, this, &MyWidget::onCurrentChanged );
...
}
void MyWidget::onCurrentChanged( const QModelIndex& current, const QModelIndex& previous )
{
_ui.treeSignalsView->setCurrentIndex(previous);
}
Но так сделать не получается, т.к. setCurrentIndex
опять генерирует QItemSelectionModel::currentChanged
Можно попробовать использовать сигнал selectionChanged
connect( _ui.treeSignalsView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &MyWidget::onSelectionChanged );
и блокировать повторные сигналы в слоте:
void MyWidget::onSelectionChanged( const QItemSelection &selected, const QItemSelection &deselected )
{
if (!deselected.isEmpty() && QMessageBox::question(view, "Question", "Save changes?", QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel) == QMessageBox::Cancel){
QSignalBlocker blocker(_ui.treeSignalsView->selectionModel());
_ui.treeSignalsView->selectionModel()->select(deselected, QItemSelectionModel::ClearAndSelect);
} else {
doSmth();
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Каким образом можно задать переменную в 1400 миллисекунд для setTimeout и вызвать ее а не прописывать каждый раз для разных функций setTimeout = 1400
есть классы 1) Объект состояния сокет-клиента StateObject и 2) сам сервер SocketAsync