Я в процессе портирования программы с Qt4 на Qt5. Я получил это до такой степени, что он компилируется с обеих версий. Почти все, кажется, работает в новой версии, за исключением, что я потерял ярлык Ctrl+U
клавиатуры в версии Qt5 в двух различных контекстах:Комбинация клавиш Ctrl + U теряется при портировании с Qt4 на Qt5
- в диалоговом окне, используя
QShortcut
назначен на ключевой последовательностиCtrl+U
- в главном окне, при прослушивании эвенов в фильтре событий.
Это похоже на Ctrl+U
. Я знаю, что в диалоговом окне другие ярлыки вроде Ctrl+F
или Ctrl+W
работают так, как раньше, а в главном окне Ctrl+P
работает как и раньше.
Есть ли что-нибудь особенное о Ctrl+U
(и, возможно, других) в Qt5, которые мешают мне увидеть событие?
Редактировать
Кажется, что это связано с наличием линии редактирования. MWE:
#include "mw.hh"
#include <QApplication>
#include <QShortcut>
#include <QStatusBar>
#include <QKeySequence>
#include <QTextStream>
#include <QLineEdit>
static void registerShortCut(const QKeySequence & seq, QWidget * receiver,
const char * fn,
Qt::ShortcutContext context = Qt::WindowShortcut)
{
QShortcut * sc = new QShortcut(seq, receiver);
sc->setContext(context);
receiver->connect(sc, SIGNAL(activated()), fn);
}
MW::MW()
{
statusBar()->showMessage("stuff");
registerShortCut(QKeySequence(tr("Ctrl+T")),
this, SLOT(test()));
registerShortCut(QKeySequence(tr("Ctrl+U")),
this, SLOT(test2()));
QLineEdit * le = new QLineEdit("stuff");
setCentralWidget(le);
}
void MW::test()
{
statusBar()->showMessage("Test !");
}
void MW::test2()
{
statusBar()->showMessage("Test 2 !");
}
int main(int argc, char ** argv)
{
QApplication main(argc, argv);
MW mw;
mw.show();
main.exec();
}
С mw.hh
:
#include <QMainWindow>
class MW : public QMainWindow {
Q_OBJECT;
public:
MW();
public slots:
void test();
void test2();
};
задерживаясь Ctrl+T
показывает тест в строке состояния, но Ctrl+U
не делает. Комментирование строки setCentralWidget(le)
восстанавливает ожидаемое поведение.
ли вы получаете какие-либо сообщения в журнале, что говорит ярлык определяется несколько раз? Если это произойдет, ярлык отключен вообще; ни место, где оно назначено, не будет работать. – goug
@goug Нет, у меня их нет. Более того, в одном из двух случаев я не использую ярлык, просто перехватывая события. –
Похоже, что что-то выше, перехватывая Ctrl-U, прежде чем оно попадет в ваше приложение или в ваш диалог. Является ли Ctrl-U ярлыком в системном меню диалога или что-то в этом роде? (Вы еще не сказали, на какой платформе вы работаете.) Вы запускаете как версию Qt4, так и версию Qt5 в том же поле, но получаете эти разные результаты? – goug