1. 程式人生 > >Qt 無邊框、透明、可移動、的個性窗體

Qt 無邊框、透明、可移動、的個性窗體

很多朋友都問透明的效果怎麼做,為什麼自己做的無邊框窗體不可移動,一個個回答的很累,乾脆寫出來分享下好了,我只用程式碼說話。

  1

  工程的main.cpp

   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();
}
關鍵的語句,就是其中的
w.setWindowOpacity(1);
w.setWindowFlags(Qt::FramelessWindowHint);
w.setAttribute(Qt::WA_TranslucentBackground);
這些語句,不知道什麼意思就摁下F1,或者直接查閱幫助文件……
對窗體無邊框的設定要寫在main裡面,這樣所有派生的子視窗,QDialog,QWidget都可繼承,
很好規劃和管理,方便統一美化設計。
以工程中一個聊天視窗為例,先用PS製作一個窗體的背景圖片,注意存為png格式,這是透明的關鍵。
不會使PS,可以找些PNG資源圖片。
我的PNG透明背景圖為:
將它新增到你的資源包中,然後設定為窗體的背景。
下圖是我的工程,其中的場景設定其實也是更換組建的背景圖片嘍~~
這個你就可以預覽到透明的無邊框窗體了,但是還有一個重要的問題,視窗竟然無法移動。
這也是無邊框導致的……具體原因我不細說,搜一下很清晰,我只說解決方案。
在每個子視窗中,都新增:
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::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}

FROM: http://blog.sina.com.cn/s/blog_6176b277010120yk.html