学习Qt编程,有时候我们很想做出好看又比较炫的画面,这时就常用到qt上的一些技巧。
这里我以一个小例子来展示qt的这些技巧,此qt编程写的,如图:(去掉标题栏和设置窗口透明后)
QQ迷你版 本地网络聊天软件详见Qt编程—我的QQ(局域网可用)—含源代码
代码实现部分:
.h文件
<span style="font-size:14px;">#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include<QLabel> #include <QMouseEvent> #include<QPalette> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; private slots: void on_pushButton_Set_clicked(); }; #endif // MAINWINDOW_H </span>
mainwindow.cpp
<span style="font-size:14px;">#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); this->setWindowTitle("QQ "); this->setWindowIcon(QIcon(":/images/po.jpg")); this->setWindowFlags(Qt::FramelessWindowHint);//去掉标题栏 this->setGeometry(QRect(950, 55, 350, 250));//可设置窗口显示的方位与大小 //this->setWindowOpacity(0.7);//设置透明1-全体透明 this->setAttribute(Qt::WA_TranslucentBackground, true);//设置透明2-窗体标题栏不透明,背景透明 this->resize(300,300);//显示大小 } MainWindow::~MainWindow() { delete ui; } </span>
main.cpp文件
<span style="font-size:14px;">#include <QtGui/QApplication> #include <QTextCodec> #include "mainwindow.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312")); QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312")); QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312")); MainWindow w; w.show(); return a.exec(); } </span>
本例中用到的透明是 : 窗体标题栏不透明,背景透明。
这里介绍几种设置透明效果的用法:
1.this->setWindowOpacity(0.7);//全体透明(指的是窗体,标题栏以及上面所有的控件都透明)里面的参数可以控制透明度。
2.窗口整体透明,但是窗体上的控件不透明。 通过设置窗体的背景色来实现,将背景色设置为全透:
代码如下:
<span style="font-size:14px;"> pal = palette(); pal.setColor(QPalette::background, QColor(0x00,0xff,0x00,0x00)); setPalette(pal);</span>
3.窗体标题栏不透明,背景透明。(本例中用到的)
this->setAttribute(Qt::WA_TranslucentBackground,true);
4.窗口整体不透明,局部透明:在Paint事件中使用Clear模式绘图。
<span style="font-size:14px;">void mainwindow::paintEvent( QPaintEvent* ) { QPainter p(this); p.setCompositionMode( QPainter::CompositionMode_Clear ); p.fillRect( 30, 30, 300, 300, Qt::SolidPattern ); } </span>
绘制区域全透明,如果绘制区域有控件不会影响控件的透明。
5.这里说一下本程序中怎样去掉标题栏
this->setWindowFlags(Qt::FramelessWindowHint);//去掉标题栏
转载注明:http://blog.csdn.net/liuyang1990i/article/details/8227342
就写到这里了,亲,有收获吗?