2013-06-21 5 views
1

및 일부 버튼이 포함 된 QDialog 기반 클래스가 있습니다. 그것은 QGraphicsScene에서 컨텍스트 메뉴 이벤트를 호출 나는 다음과 같이 행동하고 싶은 :QLineEdit에서 QDialog에서 자동 포커스 메인 윈도우에서 팝업 플래그 및 양식으로

  1. 자동 초점을 QLineEdit에 호출 할 때 (ui->lineEdit->setFocus()는 생성자에 존재)
  2. 없음 작업 표시 줄 아이콘없고 Qt::Popup 플래그로 어떤 프레임 () parent=0

parent = 0 사용을위한로 메인 창을 통해

  • 모덜 1을 충족하고 양상을 제공뿐만 아니라 프레임과 작업 표시 줄 아이콘.

    Qt::Popup은 프레임과 작업 표시 줄 아이콘을 모두 제거하지만 lineEdit 및 모달리티에 초점을 맞 춥니 다.

    나는 그것이 다른 WindowFlags 등 주요 문제의 적절한 조합을 찾기 위해 노력을 통해 시간을 많이했습니다 나는 어떤 제안을위한 감사합니다는 것 같다 그 어떤 WindowFlag이 적용됩니다 또는 parent 위젯은 lineEdit에 초점을 정의 할 때 완전히 잃어버린 것입니다.

    void GraphicsScene::resolveContextMenuAction_(QAction *action) 
    { 
        if(action == this->contextMenuEventOpenDialog_) 
        { 
         TestDialog* DWD = new TestDialog(0); 
    
         //this->DWD->setWindowFlags(Qt::Popup) 
    
         int result = DWD->exec(); 
    
         ... 
        } 
    } 
    

    생성자 :

    TestDialog::TestDialog(QWidget *parent) : QDialog(parent), ui(new Ui::TestDialog) 
    { 
        this->ui->lineEdit->setFocus(); 
    } 
    

    은 또한 초점 탭 순서 lineEdit 먼저 하나되도록 조정 하였다. 최악의 경우 언급 된 다른 기능이있는 경우에만 Qt::Popup과 같은 양식을 허용하지 않습니다.

    OS 의존적 인 경우 - 우분투 12.04를 사용하고 있습니다.

  • 답변

    0

    어때 시도 setWindowFlags (Qt :: Tool). 좋은 방법이 아닌 exec()를 호출하지 말고 setModal (true)을 호출 한 다음 show()를 호출하여 모달 대화 상자를 표시하고 activateWindow를 호출하여 도구 창에 포커스를 설정합니다. 선의 초점이 자동으로 지정됩니다. 윈도우의 테두리와 테두리, rty Qt :: FramelessWindowHint 플래그를 원하지 않는다면. 생성자의 setFocus를 호출하면 사용되지 않습니다.