小编max*_*rag的帖子

如何检测QT中按下的Alt + Enter

我有QTextEdit,我想检测"Alt + Enter"键被按下(两个键在一起).我已经安装了事件过滤器来检测按键事件,当输入按下时我可以检测到键,但是我如何检测到"Alt"键也被按下了?

我试图记住"Alt"键按下并释放(使用静态变量),但如果用户在应用程序外释放Alt键,则无效.

看到附上我的代码.

bool MTGridEditDelegate::eventFilter(QObject *obj,QEvent *event){
static bool pressed = false;
if(event->type() == QEvent::KeyPress)
{
    if(static_cast<QKeyEvent*>(event)->key() == Qt::Key_Alt)
    {
        pressed = true;
        qDebug("Alt Pressed");
    }
}
if(event->type() == QEvent::KeyRelease)
{
    if(static_cast<QKeyEvent*>(event)->key() == Qt::Key_Alt)
    {
        pressed = false;
        qDebug("Alt Released");
    }
}

if(event->type() == QEvent::KeyPress)
{
    int key = static_cast<QKeyEvent *>(event)->key();
    qDebug("The Key is : %d",key);
    switch (static_cast<QKeyEvent *>(event)->key()) 
    {
        case Qt::Key_Backtab:
            break;
        case Qt::Key_Tab:
        case Qt::Key_Enter:
        case Qt::Key_Return:
        {
            QWidget *editor = ::qobject_cast<QWidget*>(obj);
            if(!pressed)
            {
                emit commitData(editor); …
Run Code Online (Sandbox Code Playgroud)

qt qt4

5
推荐指数
1
解决办法
5433
查看次数

如何让QT应用程序编写崩溃日志

我正在研究在Qt,Windows中开发的项目,我使用Qt版本4.1.4和VC6 IDE来编译项目,大部分产品的使用都在WindowsXp上.

我经常收到测试人员和客户的崩溃报告,这些报告没有修复模式,也没有在我的开发环境中重现.

所以我得出结论,我需要从程序中写一个崩溃日志,以便在程序崩溃时我总是得到调用堆栈.

在linux中我知道它可以通过一些信号处理分段故障来做到这一点.但是如何在windows/C++中做同样的事情呢?

我试图在谷歌搜索找到一些现成的解决方案,但没有任何运气.

关于任何第三方工具/库(免费或许可)的建议也被接受,但请不要建议我必须修改模块中的每个功能以获取日志的任何方法,因为项目很大,我负担不起.

提前致谢.

更新.我现在已经将StackWalker附加到我的代码中(有点麻烦的_MBCS和UNICODE)但至少设法附加它.

我的主文件如下所示,

class MyStackWalker : public StackWalker
{  
   FILE *sgLogFile;
   public:
   MyStackWalker() : StackWalker() 
   {
     sgLogFile = fopen("ThisIsWhatIcallLog.log", "w");
   }
   MyStackWalker(DWORD dwProcessId, HANDLE hProcess) : StackWalker(dwProcessId, hProcess) 
   {
   }
   virtual void OnOutput(LPCSTR szText) 
   { 
      printf(szText); 
      fprintf(sgLogFile, "%s",szText);
      fclose(sgLogFile);
      StackWalker::OnOutput(szText); 
   }
};

LONG Win32FaultHandler(struct _EXCEPTION_POINTERS *  ExInfo)
{
    MyStackWalker sw;   
    sw.ShowCallstack();
    return EXCEPTION_EXECUTE_HANDLER;
}

void InstallFaultHandler()
{
    SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER) Win32FaultHandler);
}
Run Code Online (Sandbox Code Playgroud)

但是,由于找不到符号,我得到链接器错误,

main.obj : error LNK2001: unresolved external symbol "public: int __thiscall StackWalker::ShowCallstack(void *,struct …
Run Code Online (Sandbox Code Playgroud)

c++ windows qt

5
推荐指数
2
解决办法
8168
查看次数

标签 统计

qt ×2

c++ ×1

qt4 ×1

windows ×1