Qt枠線なし、透明、移動可能、個性的なフォームのケースの詳細

4145 ワード

原文住所:http://blog.csdn.net/yiyaaixuexi/article/details/6362865
多くの友达はすべて透明な効果がどのようにするかを闻いて、どうして自分でした枠のないフォームは移动することができなくて、1つ1つの答えはとても疲れて、いっそ书いて分かち合いました.
[cpp] view plain copy print ?
int main(int argc, char *argv[]){  
  •   

  •    QApplication::setStyle("cleanlooks");  
  •   

  •    QApplication a(argc, argv);  
  •    login w;  

  •    w.setWindowTitle("ClientLogin");  
  •   

  •   
  •    w.setWindowOpacity(1);  

  •    w.setWindowFlags(Qt::FramelessWindowHint);  
  •    w.setAttribute(Qt::WA_TranslucentBackground);  

  •    w.show();  
  •    w.move(200,100);  

  •    return a.exec();  
     int main(int argc, char *argv[]){
    
        QApplication::setStyle("cleanlooks");
    
        QApplication a(argc, argv);
        login w;
        w.setWindowTitle("ClientLogin");
    
    
        w.setWindowOpacity(1);
        w.setWindowFlags(Qt::FramelessWindowHint);
        w.setAttribute(Qt::WA_TranslucentBackground);
        w.show();
        w.move(200,100);
        return a.exec();
    }

    重要な文は、次のとおりです.
    [cpp] view plain copy print ?
    w.setWindowOpacity(1);      
  • w.setWindowFlags(Qt::FramelessWindowHint);      

  • w.setAttribute(Qt::WA_TranslucentBackground);  
    w.setWindowOpacity(1);    
    w.setWindowFlags(Qt::FramelessWindowHint);    
    w.setAttribute(Qt::WA_TranslucentBackground);

    これらの文は、意味が分からないままF 1を押したり、ヘルプドキュメントを直接調べたりして・・・
    フォームの枠線のない設定はmainに書くようにして、このようにすべての派生するサブウィンドウ、QDIalog、QWidgetはすべて継承することができて、よく計画して管理して、統一して設計を美化するのに便利です.
    プロジェクトのチャットウィンドウを例にとると、まずPSでフォームの背景画像を作成し、png形式に保存することに注意します.これは透明な鍵です.PSを使わないで、いくつかPNG資源のピクチャーを探すことができます.私のPNGの透明な背景図は:
     
      Qt 无边框、透明、可移动、的个性窗体案例详解_第1张图片
    リソースパッケージに追加し、フォームの背景に設定します.     
    下図は私の工事で、その中のシーンの设定も実は组み替えの背景のピクチャーです~~Qt 无边框、透明、可移动、的个性窗体案例详解_第2张图片
         
    これにより、透明な枠線のないフォームをプレビューできますが、ウィンドウが移動できないという重要な問題があります.これも枠がないためです......具体的な原因は詳しく言わないで、探してみるとはっきりしていて、私は解決策だけを言います.各サブウィンドウに、次の項目を追加します.
    [cpp] view plain copy print ?
    void yourwindow::mousePressEvent(QMouseEvent *event){                                                                                                          
  •         this->windowPos = this->pos();   

  •         this->mousePos = event->globalPos();  
  •         this->dPos = mousePos - windowPos;  

  • }  
  • void yourwindow::mouseMoveEvent(QMouseEvent *event){   

  •         this->move(event->globalPos() - this->dPos);  
  • }  
  • void yourwindow::mousePressEvent(QMouseEvent *event){                                                                                                        
            this->windowPos = this->pos(); 
            this->mousePos = event->globalPos();
            this->dPos = mousePos - windowPos;
    }
    void yourwindow::mouseMoveEvent(QMouseEvent *event){ 
            this->move(event->globalPos() - this->dPos);
    }
    

    これで大功が成し遂げられ、実行して効果を見てみると、緑の森は私のデスクトップで、無視することができます.
     
    Qt 无边框、透明、可移动、的个性窗体案例详解_第3张图片