我正在尝试调试QKeyEvent
问题。当我将代码放在调试器下时,我注意到变量已被优化。我无法检查缺少的值。
我的PRO文件专门将CFLAGS
和CXXFLAGS
设置为-g3 -O0
:
$ cat callboot.pro
TEMPLATE = app
TARGET = callboot-ui.exe
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets uitools
HEADERS += main_dlg.h keyboard_dlg.h lists_dlg.h numpad_dlg.h \
settings_dlg.h phone_dlg.h name_dlg.h address_dlg.h \
whitelist_dlg.h blacklist_dlg.h wifi_dlg.h
SOURCES += main_dlg.cpp keyboard_dlg.cpp lists_dlg.cpp numpad_dlg.cpp \
settings_dlg.cpp phone_dlg.cpp name_dlg.cpp address_dlg.cpp \
whitelist_dlg.cpp blacklist_dlg.cpp wifi_dlg.cpp \
main.cpp
FORMS += main_dlg.ui keyboard_dlg.ui lists_dlg.ui numpad_dlg.ui \
settings_dlg.ui phone_dlg.ui name_dlg.ui address_dlg.ui \
whitelist_dlg.ui blacklist_dlg.ui wifi_dlg.ui
CFLAGS += -g3 -O0
CXXFLAGS += -g3 -O0
QMAKE_CFLAGS += -g3 -O0
QMAKE_CXXFLAGS += -g3 -O0
但是,当我执行qmake && make
:
g++ -c -pipe -g3 -O0 -O2 -Wall -W -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_UITOOLS_
LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -isystem /usr/include/x86_64
-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtUiTools -isystem /us
r/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/
qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -isystem /usr/in
clude/libdrm -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o moc_keyboa
rd_dlg.o moc_keyboard_dlg.cpp
注意Qt构建系统踩到了我的标志。
我不需要另一个构建系统,而不必理会我的标志。我从CMake中得到了足够的信息。
我如何强制Qt构建系统遵守我的要求?
这是我要执行的代码:
void KeyboardDlg::on_button_11_clicked()
{
QChar ch = SelectAlphabet(index)[0];
QKeySequence seq = QKeySequence(ch);
Qt::Key key = toKey(seq);
QKeyEvent press(QEvent::KeyPress, toKey(seq), Qt::NoModifier);
QApplication::sendEvent(ui->textEdit, &press);
}
由于Qt在我的标志上踩到脚,这是典型的调试会话:
$ gdb callboot-ui.exe
GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git
...
Reading symbols from callboot-ui.exe...done.
(gdb) b keyboard_dlg.cpp:202
Breakpoint 1 at 0xccf0: file keyboard_dlg.cpp, line 202.
(gdb) r
Starting program: /home/jwalton/callboot/qt-ui/callboot-ui.exe
...
Thread 1 "callboot-ui.exe" hit Breakpoint 1, KeyboardDlg::on_button_11_clicked
(this=0x7fffffffdde0) at keyboard_dlg.cpp:202
202 QChar ch = SelectAlphabet(index)[0];
(gdb) n
205 QKeySequence seq = QKeySequence(ch);
(gdb) p ch
$1 = <optimized out>
(gdb) n
206 Qt::Key key = toKey(seq);
(gdb) n
207 QKeyEvent press(QEvent::KeyPress, toKey(seq), Qt::NoModifier);
(gdb) p key
$2 = <optimized out>
使用QtCreator,无论何时执行发行版本,都将添加O2
标志。手动编辑pro文件应该产生相同的结果,只需添加
CONFIG += debug
或只是打电话
qmake CONFIG+=debug && make