Ⅰ Qt在界面設計時怎麼給窗口添加背景圖片
這是一種方式:
QPixmap pixmap(QString::fromUtf8("./icon/background.png"));//當前文件夾下面的圖片
QPalette palette = this->palette();
palette.setBrush(backgroundRole(), QBrush(pixmap));
setPalette(palette);
還有一種添加資源文件,在資源文件裡面直接添加
Ⅱ qt實現多張圖片的切換不使用ui控制項
通過上方控制項中,尋找所適合的控制項,之後將其拖拽到自己合適的位置上:
具體布局如下圖所示:
2.設置ui控制項名稱
如上圖所示,我將每一個單選按鈕都設置了相對應的名字,分別為上方的radioButton_16 /32 /64 /128 /256
其餘的控制項也都設置了相應的類名(名字),那我們就來使用它們吧.
3.使用控制項進行界面交互
3.1 選擇圖片
右鍵點擊選擇圖片按鈕,之後點擊轉到槽選項,繼續點擊彈出框中的clicked()點擊交互按鈕『會自動跳轉到寫入代碼的位置,同時在Headers下的app.h中,會自動導入插槽內』意味著,我們能通過這個點擊事件來展示我們所需要的交互內容.
那麼,著手於代碼的操作吧:
『在Sources下的app.cpp中』
我們能看到自動生成的代碼塊,其中:
app 我們所掛載的媒介,這個媒介app下,仍有著其他的屬性
pushButton_file 這個按鈕的名字
clicked 點擊事件
不信的話你可以試著點擊ui界面的最底層區域,這樣我們就能看到objectName的值是app了,當然,不要試圖在你寫代碼期間修改這個媒介,否則,有你好受的…
void app::on_pushButton_file_clicked()
{
fileName = QFileDialog::getOpenFileName(this,tr("Open File"),".",tr("Images(*.png*.jpeg *.jpg)"));
//獲取圖片的路徑 不過 一定要在「 app.h」里,加入以下頭文件 #include <QFileDialog>
// #include <QDebug>
// #include <QFileInfo>
// 同時在『app.h』的private中,加入: QString fileName; 否則會找不到這個名字從而報錯
qDebug() << "fileName=" << fileName;
QFileInfo fi(fileName);
QString name = fi.fileName();
ui->label_filename->setText(name);
//QT 文件信息 將路徑(fileName) 存儲在 fi中, 然後 獲取到fi裡面的文件名稱
//在這里,fi.fileName() 中的fileName並不是路徑,而是路徑中 所在的文件信息
//比如 fileName= "C:/Users/power/Pictures/0.jpg" 那麼『name』就是 0.jpg
//之後賦值給name,緊接著將這個name的值 送到 ui內的組件label_filename上,起名為 name
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
上方,『ui->label_filename』代表的是整個ui界面下,一個叫做label_filename的文本框,被設置了叫做『name』的名字, 名字為選擇圖片的文件名,比如: 0.jpg
簡單來說: 我所拖拽到ui界面中的所有控制項,都是ui的兒子,那麼 作為父親是不是隨時可以調用自己的兒子呢?(這點毋庸置疑)
效果圖:
心細的在左上角會發現一個圖片,那麼,我們怎麼導入這個圖片,使得個性化呢
3.2 個性化窗口圖片
右鍵這個工程文件->在出現的菜單中選擇Add New選項,接著選擇左側Qt,在右側選擇Qt Resourse File,最後選擇右下方choose按鈕.接著在File name中寫入文件名為images,(可以寫別的文件名,並不一定要這個),下一步後點擊完成.
這些操作都完成後,會在工程文件下出現Resources,並且在內部存在一個images.qrc文件
那麼,我們接著右鍵->添加現有文件
隨後會彈出一個窗口,在其中我們選擇images,並選擇其中的圖片,這樣圖片就載入進來了.(一定要提前在這個工程文件下放入images文件夾,同時將文件夾中放入圖片.)
之後在app.ui中,選中整個窗口,找到windowicon,然後點擊三角,選擇資源後,將圖片放入.就有圖標嘍
RC_ICONS = images/logo.ico
1
如果想發布時帶有圖標,一定要在XX.pro文件內,寫上這句話:
3.3 默認選中單選框
正常來說,我們會默認選中一個單選框,使得界面美觀
這樣,我們就默認選中64X64的了
3.4 預覽圖片
同上,選擇『預覽圖片』,右鍵 轉到槽 『仍然是點擊事件』,之後在『app.h』中private屬性下加入,並加入頭文件:
void app::on_pushButton_showPic_clicked()
{
if(ui->radioButton_16->isChecked()){ //16X16被選中的話
picHeight = 16;
picWidth = 16;
}else if(ui->radioButton_32->isChecked()){
picHeight = 32;
picWidth = 32;
}else if (ui->radioButton_64->isChecked()) {
picHeight = 64;
picWidth = 64;
}else if (ui->radioButton_128->isChecked()) {
picHeight = 128;
picWidth = 128;
}else if (ui->radioButton_256->isChecked()) {
picHeight = 256;
picWidth = 256;
}
qDebug() << "picWidth:" << picWidth;
qDebug() << "picHeight:" << picHeight;
if(!fileName.isEmpty()){ //判斷文件名是否為空
QPixmap map(fileName);
QPixmap newMap = map.scaled(picWidth,picHeight);
ui->label_picture_show->setPixmap(newMap);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
picHeight 自己設置的圖片的高度
picWidth 自己設置的圖片的寬度
isChecked 代表 是否選中當前的元素
總而言之,就是我選擇其中一個按鈕,然後根據自己設置的圖片大小,設置你所展示的圖片大小,比如:
Ⅲ qtcreator如何在stylesheet中設置圖片
qtcreator如何在stylesheet中設置圖片
項目建立完成後:
右鍵點你的項目 「Add New」->"QT Resource file" 生成一個qrc文件
然後雙擊它 點add 然後Add Prefix 再Add file 完事之後build一下
在你的ui上點右鍵 ->Change StyleSheet ->add Resource ->backgroud-image 順著往下點就能看見你在qrc里添加的那張圖片了
摘要:
QT Create中,對button或者window等部件設置背景、顏色、透明等樣式時,需要用到style sheet,可以直接在代碼里寫,也可以在ui設計師里通過右鍵change style sheet的方法來設置,本人是使用的後面的方式,下面介紹幾種常見的用法。
介紹:
作者使用的開發環境為:qt creator 201005, qt4.7。
1、利用style sheet給窗體設置背景
使用stylesheet設置背景圖片還是有一些要注意的,如果是在mainwindow和dialog中,直接右鍵change style sheet在add resource中選擇background-image或者border-image,選擇資源文件中的圖片就行了(前者是按像素顯示圖片,後者可根據窗體大小來自動縮放圖片),如下圖:
但在widget中就不行,你會發現,用同樣的方法,背景並沒有發生改變,而僅僅是它的子窗體背景圖片發生了改變。
那麼在widget中要如何做呢,我們在widget中放置一個frame,然後對frame通過stylesheet設置背景,後面窗體里所有的部件都放在這個frame里。
我們知道,子窗體會繼承父窗體的屬性,也就是說,父窗體的背景,在子窗體中也會有,那如何讓子窗體不繼承父窗體的背景呢,同樣的,還是在Edit Style Sheet里,需下輸入如下代碼:
#desktop {
border-image: url(:/images/desktop.jpg);
}
#desktop * {
border-image:url();
}
desktop是你的窗體名。
2、menubar設置透明
我想做一個菜單按鈕,像ubuntu的應用程序菜單一樣,能在點擊時彈出一個下拉框,我選擇了用mainwindow來實現,但我如現menuba顯示在頂層很難看,如何才能不讓它顯示呢。
設置menuba的stylesheet,
background-color:transparent
將背景設置為透明。
3、tool button不顯示邊框
當我們設置button的icon時,發現icon的形狀並不與button完全一致,如下圖:
設置stylesheet
border-style: flat;
效果如下:
注意,一定要選擇tool button,而不要選擇push button,因為push button活動的時候會有一個虛線框。
要達到上圖的效果,除了設置border-style:flat,可不可以將style設置為transparent呢?設置成transparent後,顯示上看,效果是和上圖的一樣,但當按下時,button沒有被圖片覆蓋的地方就會顯示被按下時的顏色。
4、在父窗體的stylesheet中設置子部件的屬性
假設有多個button,且它們的樣式是一樣的,那是不是需要一個個設置呢?不需要的,我們可以在父窗體中進行設置,那麼子部件都會繼承它的屬性。
如果某個button的樣式特殊,再單獨修改就行了,下面舉個實例,在父窗體的stylesheet中設置如下
QDialog{background:rgb(229, 255, 239)}
QMenuBar{background:url(:/image/header.bmp)}
QStatusBar{background:url(:/image/header.bmp)}
QPushButton{background:url(:/image/header.bmp)}
QLCDNumber{background:url(:/image/lcd.bmp)}
QLabel{color: rgb(0, 0, 255)}
QDial{background-color: rgb(67, 67, 67)}
QGroupBox {
border-width:2px;
border-style:solid;
border-color:#FFFFFF;
}
QGroupBox{color: rgb(255,255, 255)}
QToolButton{border-style: flat;}
Ⅳ qt中主窗口背景設置
以前遇到的很多小知識,從今天開始都一點一點記錄下來。。。
窗口背景無非兩種:背景色、背景圖片。Qt中窗口背景如何設置?下面介紹三種方法:
一、QPalette設置背景
二、實現paintEvent,使用QPainter來繪制背景
三、使用QSS來設置背景
關於QSS的使用不想多說,一般我不用QSS設置窗口背景,也不建議使用。(注意:這里是對於窗口而言)。如果是子部件當然可以。因為窗口使用QSS設置背景之後,若子部件不使用同樣的方式來設置,默認則會繼承父窗口的樣式
子部件一般情況下也不需要設置背景圖片,即使需要使用QSS也完全可以滿足。設置較多的是背景色與圖標,QSS中使用background或者background-color的方式可以實現背景色的設置,圖標則可以使用setPixmap或者setIcon來設置!
下面介紹QPalette以及paintEvent
一、QPalette設置背景
構造函數中可以使用如下方式:
(1)設置背景色
QPalette palette(this->palette());
palette.setColor(QPalette::Background, Qt::black);
this->setPalette(palette);
或:
QPalette palette;
palette.setBrush(this->backgroundRole(), Qt::black);
this->setPalette(palette);
這里setColor和setBrush都可以使用!
(2)設置背景圖片
QPixmap pixmap = QPixmap(":/qm/safe").scaled(this->size());
QPalette palette(this->palette());
palette.setBrush(QPalette::Background, QBrush(pixmap));
this->setPalette(palette);
上面方式無論設置背景色還是背景圖片QPalette::Background與this->backgroundRole()是等價的!
二、paintEvent設置背景
(1)設置背景色
void IIIMark::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setBrush(Qt::black);
painter.drawRect(this->rect());
}
(2)設置背景圖片
void IIIMark::paintEvent(QPaintEvent *)
{
QPixmap pixmap = QPixmap(":/qm/safe").scaled(this->size());
QPainter painter(this);
painter.drawPixmap(this->rect(), pixmap);
}
注意:
(1)以上都是用scaled方式對圖片進行了適應窗口大小的設置,因為所給的圖片大小不一定滿足要求,所以採用此方式!當然圖片經過拉伸或者壓縮之後會變形(純色圖片除外),所以對圖片採用此方式時需要注意。
(2)設置背景范圍的時候如果需要充滿整個窗口最好使用this->rect(),因為我看到很多人在使用QRect(0, 0, 400, 400)之類的語句,那麼如果窗口大小改變了呢?此句是不是要跟著變呢?
(3)如果需要背景圖片或者背景色隨可以發生改變時,也就是所謂的換膚功能,則採用paintEvent的方式,在需要改變的時候使用update()來進行更新。
(4)this->setAutoFillBackground(true)又讓我想起了tr(),被很多人濫用。這句話在什麼時候使用呢?不妨採用QPalette設置背景的方式加上與去掉這句話對比一下(在有父窗口的情況下使用)。如果這個QWidget直接show,則有背景色,如果放到一個父窗口中,就沒有效果。添加該句即可!
Ⅳ qt中如何添加窗體背景圖片如何改變窗體背景顏色
一,
添加窗體背景
在窗體構造函數中加入:方法1:
this-setStyleSheet(tr("background:url(pic.jpg)"));方法二:
this-setAutoFillBackground(true);
QPalette
myPalette;
myPalette.setBrush(this-backgroundRole(),
QBrush(QPixmap("./pic.jpg")));
this-setPalette(myPalette);
二,改變背景顏色在窗體構造函數中加入: