1
我正在將程序從Qt4移植到Qt5。我已經達到了編譯這兩個版本的程度。幾乎一切似乎都在新版本中的工作,除外,我已經失去了在QT5版本Ctrl+U
鍵盤快捷鍵在兩個不同的上下文:在對話框中從Qt4移植到Qt5時Ctrl + U組合鍵丟失
- ,使用分配給
Ctrl+U
鍵序列QShortcut
當在事件過濾器中偵聽事件時,在主窗口中輸入
- 。
這似乎特定於Ctrl+U
。我知道在對話框中,其他快捷方式(如Ctrl+F
或Ctrl+W
)與以前一樣工作,而在主窗口中,Ctrl+P
也可以像以前一樣工作。
Qt5中有什麼特別的Ctrl+U
(可能還有其他的)阻止我看到該事件?
編輯
似乎它與一個行編輯的存在。 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。 Ctrl-U是對話框系統菜單上的一個快捷方式,還是沿着這些方向? (你還沒有說過你在使用什麼平臺。)你是否在同一個盒子上同時運行Qt4版本和Qt5版本,但獲得這些不同的結果? – goug