Qt快速上手(一):布局管理、样式外观

布局管理器

QHBoxLayout:在水平方向排列窗口部件,从左到右;
QVBoxLayout:在垂直方向排列窗口部件,从上到下;
QGridLayout:把各个窗口部件排列在一个网格中。 

Qt快速上手(一):布局管理、样式外观_第1张图片

1.#include "mainwindow.h"  
2.#include   
3.#include   
4.#include   
5.#include   
6.#include   
7.#include   
8.  
9.int main(int argc, char *argv[])  
10.{  
11.    QApplication a(argc, argv);  
12.    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));//设定字符集为UTF-8  
13.  
14.    QWidget *widget = new QWidget ;  
15.    QLabel *labelaccount = new QLabel(QObject::tr("帐号:"),widget);//创建帐号标签  
16.    QLabel *labelpassword = new QLabel(QObject::tr("密码:"),widget);//创建密码标签  
17.    QLineEdit *lineaccount = new QLineEdit(widget) ;//创建帐号文本输入框  
18.    QLineEdit *linepassword = new QLineEdit(widget) ;//创建密码文本输入框  
19.    QPushButton *buttonenter = new QPushButton(QObject::tr("确认"),widget);//创建确认按钮  
20.    QPushButton *buttonquit = new QPushButton(QObject::tr("退出"),widget);//创建退出按钮  
21.  
22.    QHBoxLayout *layoutaccount = new QHBoxLayout ;//创建水平布局管理器  
23.    layoutaccount->addWidget(labelaccount);  
24.    layoutaccount->addWidget(lineaccount);//从左至右放置部件  
25.  
26.    QHBoxLayout *layoutpassword = new QHBoxLayout ;  
27.    layoutpassword->addWidget(labelpassword);  
28.    layoutpassword->addWidget(linepassword);  
29.  
30.    QVBoxLayout *layoutleft = new QVBoxLayout ;//创建一个垂直布局管理器  
31.    layoutleft->addStretch();//添加分隔符  
32.    layoutleft->addLayout(layoutaccount);  
33.    layoutleft->addLayout(layoutpassword);  
34.    layoutleft->addStretch();  
35.  
36.    QVBoxLayout *layoutright = new QVBoxLayout ;  
37.    layoutleft->addStretch();  
38.    layoutright->addWidget(buttonenter);  
39.    layoutright->addWidget(buttonquit);  
40.    layoutright->addStretch();  
41.  
42.    QHBoxLayout *layoutmain = new QHBoxLayout ;  
43.    layoutmain->addLayout(layoutleft);  
44.    layoutmain->addLayout(layoutright);  
45.  
46.  
47.    widget->setLayout(layoutmain);  
48.    widget->show();  
49.    int rec = a.exec() ;  
50.    delete widget ;  
51.    return rec ;  
52.}  

 

第31、34、37、40行添加了分隔符(或称伸展器),用它来占据剩余的空白区域,这样可以使窗口增大或缩小时,部件仍处于中间位置,不会随窗口变高变低而变化。

布局管理器既可以包含子部件,也可以包含子布局(例如第32、33、43、44、行),通过布局的不同嵌套组合,就可能构建相当复杂的布局层次。

 

 

 

setStyleSheet()设置窗口样式

Qt快速上手(一):布局管理、样式外观_第2张图片

1.#include   
2.#include   
3.#include   
4.  
5.int main(int argc, char *argv[])  
6.{  
7.    QApplication a(argc, argv);  
8.    QWidget *widget = new QWidget;  
9.    QPushButton *button = new QPushButton("Start NewGame",widget);  
10.    widget->resize(300,150);//设置窗口大小  
11.    widget->setStyleSheet("background-color:rgba(247,192,193,255);");//设置样式  
12.    button->setStyleSheet("QPushButton{background-color:rgba(242,141,102,255);\  
13.                          color:rgba(50,25,25,255);\  
14.                          border:2px groove rgb(242,141,0);border-radius:20px;padding:2px 2px;\  
15.                          background-color: qconicalgradient(cx:0.5, cy:0.522909, angle:179.9, stop:0.494318 rgba(242,141,102,255), \  
16.                          stop:0.5 rgba(247,192,193,255));}"  
17.                          "QPushButton:pressed{background-color:rgba(200,200,200,255);}");  
18.    button->move((widget->width()-button->width())/2,(widget->height()-button->height())/2);//让按钮移动到窗口中间  
19.    widget->show();  
20.    int rec = a.exec() ;  
21.    delete widget ;  
22.    return rec ;  
}  

setStyleSheet()功能非常强大,样式繁多。

 

 

setFont()设置字体

Qt快速上手(一):布局管理、样式外观_第3张图片

1.#include   
2.#include   
3.#include   
4.  
5.int main(int argc, char *argv[])  
6.{  
7.    QApplication a(argc, argv);  
8.    QWidget *widget = new QWidget;  
9.    QPushButton *button = new QPushButton(QObject::trUtf8("新游戏"),widget);  
10.    widget->resize(300,150);//设置窗口大小  
11.    button->resize(100,50);  
12.    widget->setStyleSheet("background-color:rgba(247,192,193,255);");//设置样式  
13.    button->setStyleSheet("QPushButton{background-color:rgba(242,141,102,255);\  
14.                          color:rgba(50,25,25,255);\  
15.                          border:2px groove rgb(242,141,0);border-radius:20px;padding:2px 2px;\  
16.                          background-color: qconicalgradient(cx:0.5, cy:0.522909, angle:179.9, stop:0.494318 rgba(242,141,102,255), \  
17.                          stop:0.5 rgba(247,192,193,255));}"  
18.                          "QPushButton:pressed{background-color:rgba(200,200,200,255);}");  
19.    QFont fontbutton(QObject::trUtf8("楷体"),20,75);//楷体,20号字体,加粗  
20.    button->setFont(fontbutton);  
21.    button->move((widget->width()-button->width())/2,(widget->height()-button->height())/2);//让按钮移动到窗口中间  
22.    widget->show();  
23.    int rec = a.exec() ;  
24.    delete widget ;  
25.    return rec ;  
26.}  

 

为窗口添加图片背景

第一步:添加资源文件。

在你工程的当前目录里建一个文件夹,然后把图片放进这个文件夹里。

Qt快速上手(一):布局管理、样式外观_第4张图片

Qt快速上手(一):布局管理、样式外观_第5张图片

回到Ct Creator,右键自己的工程,添加新文件,出现以下窗口

Qt快速上手(一):布局管理、样式外观_第6张图片

选好Qt Resource File后点击Choose,出现以下窗口

Qt快速上手(一):布局管理、样式外观_第7张图片

名称自取,路径选择刚才你放置图片的文件夹,点击下一步,然后出现的窗口就选择默认方式,直到出现以下画面

Qt快速上手(一):布局管理、样式外观_第8张图片

点击添加前缀(自取),前缀添加后再次点击添加,出现添加文件,点击添加文件,选择你的图片文件,这样资源文件就添加好了。

Qt快速上手(一):布局管理、样式外观_第9张图片

然后就可以在代码中使用图片了。

Qt快速上手(一):布局管理、样式外观_第10张图片

1.#include   
2.#include   
3.#include   
4.  
5.int main(int argc, char *argv[])  
6.{  
7.    QApplication a(argc, argv);  
8.    QWidget *widget = new QWidget;  
9.    widget->resize(500,300);  
10.      
11.    QPixmap pixmap(":/mainwindow/img2.png");  
12.    QPalette palette = widget->palette();  
13.    palette.setBrush(QPalette::Background,QBrush(pixmap.scaled(widget->size())));  
14.    widget->setPalette(palette);//给窗口添加图片背景  
15.      
16.      
17.    widget->show();  
18.    int rec = a.exec() ;  
19.    delete widget ;  
20.    return rec ;  
21.}  

 

窗口模式

 

setWindowFlags(Qt::FramelessWindowHint);//设置无边窗口

 

setWindowFlags(Qt::WindowStaysOnTopHint);//设置窗口最上

 

setWindowState(Qt::WindowFullScreen);//设置窗口全屏

 

setModal(true);//设置模态

 

setFixedSize(const QSize&);//设置窗口固定大小

 

setFocusPolicy(Qt::NoFocus);//无焦点

 

setAttribute(Qt::WA_TranslucentBackground);//设置透明

 

 

 

你可能感兴趣的:(Qt快速上手(一):布局管理、样式外观)