Qt枠線なし、透明、移動可能、個性的なフォームのケースの詳細
原文住所: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();
重要な文は、次のとおりです.
[cpp] view plain copy print ?
w.setWindowOpacity(1); w.setWindowFlags(Qt::FramelessWindowHint);
w.setAttribute(Qt::WA_TranslucentBackground);
これらの文は、意味が分からないままF 1を押したり、ヘルプドキュメントを直接調べたりして・・・
フォームの枠線のない設定はmainに書くようにして、このようにすべての派生するサブウィンドウ、QDIalog、QWidgetはすべて継承することができて、よく計画して管理して、統一して設計を美化するのに便利です.
プロジェクトのチャットウィンドウを例にとると、まずPSでフォームの背景画像を作成し、png形式に保存することに注意します.これは透明な鍵です.PSを使わないで、いくつかPNG資源のピクチャーを探すことができます.私のPNGの透明な背景図は:
リソースパッケージに追加し、フォームの背景に設定します.
下図は私の工事で、その中のシーンの设定も実は组み替えの背景のピクチャーです~~
これにより、透明な枠線のないフォームをプレビューできますが、ウィンドウが移動できないという重要な問題があります.これも枠がないためです......具体的な原因は詳しく言わないで、探してみるとはっきりしていて、私は解決策だけを言います.各サブウィンドウに、次の項目を追加します.
[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); }
これで大功が成し遂げられ、実行して効果を見てみると、緑の森は私のデスクトップで、無視することができます.
多くの友达はすべて透明な効果がどのようにするかを闻いて、どうして自分でした枠のないフォームは移动することができなくて、1つ1つの答えはとても疲れて、いっそ书いて分かち合いました.
[cpp] view plain copy print ?
int main(int argc, char *argv[]){
QApplication::setStyle("cleanlooks");
QApplication a(argc, argv);
w.setWindowTitle("ClientLogin");
w.setWindowFlags(Qt::FramelessWindowHint);
w.show();
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.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の透明な背景図は:
リソースパッケージに追加し、フォームの背景に設定します.
下図は私の工事で、その中のシーンの设定も実は组み替えの背景のピクチャーです~~
これにより、透明な枠線のないフォームをプレビューできますが、ウィンドウが移動できないという重要な問題があります.これも枠がないためです......具体的な原因は詳しく言わないで、探してみるとはっきりしていて、私は解決策だけを言います.各サブウィンドウに、次の項目を追加します.
[cpp] view plain copy print ?
void yourwindow::mousePressEvent(QMouseEvent *event){
this->mousePos = event->globalPos();
}
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);
}
これで大功が成し遂げられ、実行して効果を見てみると、緑の森は私のデスクトップで、無視することができます.