要
button控件是由system.windows.forms.button類提供的控件,又稱為按鈕控件。
正文
Button控件,又稱為按鈕控件,它表允許用戶通過(guò)單擊來(lái)執(zhí)行操作。Button控件既可以顯示文本,也可以顯示圖像,當(dāng)該控件被單擊時(shí),它看起來(lái)像是被按下,然后被釋放。Button控件最常用的是Text屬性,其中,Text屬性用來(lái)設(shè)Button:控件顯示的文本,Click事件用來(lái)指定單擊Button控件時(shí)執(zhí)行的操作。
屬性
Anchor | 獲取或設(shè)置控件綁定到的容器的邊緣并確定控件如何隨其父級(jí)一起調(diào)整大小。<br><br>(繼承自 Control) |
AutoEllipsis | 獲取或設(shè)置一個(gè)值,該值指示是否要在控件的右邊緣顯示省略號(hào) (...) 以表示控件文本超出指定的控件長(zhǎng)度。<br><br>(繼承自 ButtonBase) |
BackColor | 獲取或設(shè)置控件的背景色。<br><br>(繼承自 ButtonBase) |
Cursor | 獲取或設(shè)置當(dāng)鼠標(biāo)指針位于控件上時(shí)顯示的光標(biāo)。<br><br>(繼承自 Control) |
DialogResult | 獲取或設(shè)置一個(gè)值,該值在單擊按鈕時(shí)返回到父窗體。 |
Dock | 獲取或設(shè)置哪些控件邊框停靠到其父控件并確定控件如何隨其父級(jí)一起調(diào)整大小。<br><br>(繼承自 Control) |
Enabled | 獲取或設(shè)置一個(gè)值,該值指示控件是否可以對(duì)用戶交互作出響應(yīng)。<br><br>(繼承自 Control) |
FlatAppearance | 獲取用于指示選中狀態(tài)和鼠標(biāo)狀態(tài)的邊框外觀和顏色。<br><br>(繼承自 ButtonBase) |
FlatStyle | 獲取或設(shè)置按鈕控件的平面樣式外觀。<br><br>(繼承自 ButtonBase) |
Focused | 獲取一個(gè)值,該值指示控件是否有輸入焦點(diǎn)。<br><br>(繼承自 Control) |
Font | 獲取或設(shè)置控件顯示的文字的字體。<br><br>(繼承自 Control) |
ForeColor | 獲取或設(shè)置控件的前景色。<br><br>(繼承自 Control) |
Image | 獲取或設(shè)置顯示在按鈕控件上的圖像。<br><br>(繼承自 ButtonBase) |
ImageAlign | 獲取或設(shè)置按鈕控件上的圖像對(duì)齊方式。<br><br>(繼承自 ButtonBase) |
ImageIndex | 獲取或設(shè)置按鈕控件上顯示的圖像的圖像列表索引值。<br><br>(繼承自 ButtonBase) |
ImageKey | 獲取或設(shè)置 ImageList 中的圖像的鍵訪問(wèn)器。<br><br>(繼承自 ButtonBase) |
ImageList | 獲取或設(shè)置包含按鈕控件上顯示的 ImageList 的 Image。<br><br>(繼承自 ButtonBase) |
Name | 獲取或設(shè)置控件的名稱。<br><br>(繼承自 Control) |
Size | 獲取或設(shè)置控件的高度和寬度。<br><br>(繼承自 Control) |
TabIndex | 獲取或設(shè)置控件在其容器內(nèi)的 Tab 鍵順序。<br><br>(繼承自 Control) |
TabStop | 獲取或設(shè)置一個(gè)值,該值指示用戶能否使用 Tab 鍵將焦點(diǎn)放到該控件上。<br><br>(繼承自 Control) |
Tag | 獲取或設(shè)置包含有關(guān)控件的數(shù)據(jù)的對(duì)象。<br><br>(繼承自 Control) |
Text | 獲取或設(shè)置與此控件關(guān)聯(lián)的文本。<br><br>(繼承自 ButtonBase) |
TextAlign | 獲取或設(shè)置按鈕控件上的文本對(duì)齊方式。<br><br>(繼承自 ButtonBase) |
Top | 獲取或設(shè)置控件上邊緣與其容器的工作區(qū)上邊緣之間的距離(以像素為單位)。<br><br>(繼承自 Control) |
TopLevelControl | 獲取沒(méi)有另一個(gè) Windows 窗體控件作為其父級(jí)的父控件。 通常,這是控件所在的最外面的 Form。<br><br>(繼承自 Control) |
Visible | 獲取或設(shè)置一個(gè)值,該值指示是否顯示該控件及其所有子控件。<br><br>(繼承自 Control) |
Width | 獲取或設(shè)置控件的寬度。<br><br>(繼承自 Control) |
BackgroundImage | 獲取或設(shè)置在控件中顯示的背景圖像。<br><br>(繼承自 Control) |
BackgroundImageLayout | 獲取或設(shè)置在 ImageLayout 枚舉中定義的背景圖像布局。<br><br>(繼承自 Control) |
事件
Click | 在單擊控件時(shí)發(fā)生。<br><br>(繼承自 Control) |
DoubleClick | 當(dāng)用戶雙擊 Button 控件時(shí)發(fā)生。 |
Enter | 進(jìn)入控件時(shí)發(fā)生。<br><br>(繼承自 Control) |
MouseClick | 用鼠標(biāo)單擊控件時(shí)發(fā)生。<br><br>(繼承自 Control) |
MouseDoubleClick | 當(dāng)用戶使用鼠標(biāo)雙擊 Button 控件時(shí)發(fā)生。 |
MouseDown | 當(dāng)鼠標(biāo)指針位于控件上并按下鼠標(biāo)鍵時(shí)發(fā)生。<br><br>(繼承自 Control) |
MouseEnter | 在鼠標(biāo)指針進(jìn)入控件時(shí)發(fā)生。<br><br>(繼承自 Control) |
MouseHover | 在鼠標(biāo)指針停放在控件上時(shí)發(fā)生。<br><br>(繼承自 Control) |
MouseLeave | 在鼠標(biāo)指針離開(kāi)控件時(shí)發(fā)生。<br><br>(繼承自 Control) |
MouseMove | 在鼠標(biāo)指針移到控件上時(shí)發(fā)生。<br><br>(繼承自 Control) |
MouseUp | 在鼠標(biāo)指針在控件上并釋放鼠標(biāo)鍵時(shí)發(fā)生。<br><br>(繼承自 Control) |
MouseWheel | 在控件有焦點(diǎn)且鼠標(biāo)輪移動(dòng)時(shí)發(fā)生。<br><br>(繼承自 Control) |
Move | 在移動(dòng)控件時(shí)發(fā)生。<br><br>(繼承自 Control) |
對(duì)話框布局
設(shè)置Anchor 為 Bottom,Right
我們給按鈕設(shè)置一條線的樣式
圖片背景BackgroundImage,添加圖片,
設(shè)置背景填充樣式BackgroundImageLayout,這里我選 None
Center | 2 | 圖像在控件的矩形工作區(qū)中居中顯示。 |
None | 0 | 圖像沿控件的矩形工作區(qū)頂部左對(duì)齊。 |
Stretch | 3 | 圖像沿控件的矩形工作區(qū)拉伸。 |
Tile | 1 | 圖像沿控件的矩形工作區(qū)平鋪。 |
Zoom | 4 | 圖像在控件的矩形工作區(qū)中放大。 |
給按鈕添加一個(gè)圖標(biāo)
添加一個(gè)click事件
話框在Qt GUI應(yīng)用程序中有著廣泛的用途,對(duì)話框有模態(tài)、非模態(tài)兩種情況。
對(duì)于參數(shù)選擇的對(duì)話框,一般用模態(tài)對(duì)話框;對(duì)于顯示或查看某些內(nèi)容的對(duì)話框,一般用非模態(tài)對(duì)話框。
對(duì)話框類QDialog,官方文檔:http://qt-project.org/doc/qt-4.8/qdialog.html
模態(tài)對(duì)話框通過(guò)調(diào)用exec()函數(shù)實(shí)現(xiàn),使用模態(tài)對(duì)話框時(shí),事件就在對(duì)話框內(nèi)部循環(huán),必須將對(duì)話框關(guān)閉才能繼續(xù)執(zhí)行主界面的操作。
需要注意的是,關(guān)閉模態(tài)對(duì)話框時(shí),exec()將返回一個(gè)值。
原型:int QDialog::exec () [slot]
返回值利用:比如對(duì)話框中有Ok和Cancel兩個(gè)按鈕,點(diǎn)擊Ok按鈕時(shí),關(guān)閉對(duì)話框同時(shí)主程序接受對(duì)話框中設(shè)置的參數(shù),點(diǎn)擊Cancel或右上角的X后,關(guān)閉對(duì)話框并且立即返回不再執(zhí)行下面的程序。這種情況下,將Ok按鈕的clicked()信號(hào)與accept()槽連接,Cancel按鈕的clicked信號(hào)與reject()槽連接。這時(shí),當(dāng)點(diǎn)擊Ok按鈕時(shí),將觸發(fā)accept()槽,exec()返回QDialog::Recepted,當(dāng)點(diǎn)擊Cancel按鈕時(shí),將觸發(fā)reject槽,exec()返回QDialog::Rejected。
connect(ui.Ok,SIGNAL(clicked()),this,SLOT(accept()));
connect(ui.Cancel,SIGNAL(clicked()),this,SLOT(reject()));
執(zhí)行時(shí),進(jìn)行一下判斷,點(diǎn)擊了Cancel返回,點(diǎn)擊了Ok傳遞對(duì)話框中的參數(shù)繼續(xù)執(zhí)行
//在某個(gè)函數(shù)中調(diào)用對(duì)話框
// a為對(duì)話框類對(duì)象
if(a.exec()==QDialog::Rejected)
{
//操作
return;
}
//傳遞對(duì)話框中的參數(shù)
//繼續(xù)操作
不知道說(shuō)明白了沒(méi)有,不明白的話自己下代碼實(shí)現(xiàn)一下。
非模態(tài)對(duì)話框調(diào)用show()函數(shù)實(shí)現(xiàn),當(dāng)然在主程序中,調(diào)用非模態(tài)對(duì)話框時(shí),如果只寫(xiě)個(gè)show(),可能是對(duì)話框一閃而過(guò),為了解決這個(gè)情況,需要全局對(duì)象的事件響應(yīng)槽processEvents(),定時(shí)的訪問(wèn)該對(duì)話框,這樣就可以處理主界面的事件同時(shí)對(duì)話框也不會(huì)消失。
本人采用方法時(shí)利用QTimer類的singleShot()方法。QTimer類提供了對(duì)時(shí)鐘的操作。
QTimer類的官方文檔:http://qt-project.org/doc/qt-4.8/qtimer.html
singleShot的原型:void QTimer::singleShot ( int msec, QObject * receiver, const char * member ) [static]
第一個(gè)參數(shù)為執(zhí)行的時(shí)間間隔,單位為ms
第二個(gè)參數(shù)為接受的對(duì)象
第三個(gè)參數(shù)為觸發(fā)的槽
恰好,我們可以每隔msec時(shí)間觸發(fā)processEvents(),從而使對(duì)話框不消失,第二個(gè)參數(shù)為對(duì)話框?qū)ο蟆P枰⒁獾氖牵瑢?duì)話框的對(duì)象要定義在堆上(即要定義成指針對(duì)象),因?yàn)槿绻x在棧上,執(zhí)行完后函數(shù)后對(duì)象會(huì)被自動(dòng)清理掉,找不到第二個(gè)參數(shù)所需的對(duì)象,就沒(méi)法顯示出對(duì)話框了。
#include <QTimer>
CModallessDialog *dialog; //最好定義成全局變量
dialog=new CModallessDialog;
dialog->show();
dialog->setTitle(tr("非模態(tài)對(duì)話框")); //設(shè)置窗口標(biāo)題
//對(duì)話框中的一些處理
QTimer::singleShot(200,dialog,SLOT(qApp->processEvents())); //時(shí)間間隔200ms
在使用時(shí),將dialog對(duì)象delete掉之后對(duì)話框就會(huì)消失
//如果對(duì)話框顯示,就將其刪除
if(NULL!=dialog)
{
delete dialog
dialog=NULL;
}
在顯示對(duì)話框時(shí),也要注意如果dialog!=NULLs時(shí),現(xiàn)將其delete掉賦NULL再分配地址。
了,這一節(jié)咱們來(lái)實(shí)現(xiàn)預(yù)覽功能的第一步:給工程多加一個(gè)窗體,并且在按“預(yù)覽”按鈕時(shí),將它顯示出來(lái)。
新建窗口
0、在項(xiàng)目窗體里單擊鼠標(biāo)右鍵,然后選擇Add New...,然后在彈出的窗口里選擇“QT->QT設(shè)計(jì)師界面類”,并點(diǎn)擊Choose...
Add New...
1、然后的步驟里選擇Dialog without Buttons,點(diǎn)擊下一步
Dialog without Buttons
2、設(shè)置好我們的類名,在這里我寫(xiě)的PreViewVideoWindow,記住,只需要改類名,其它的地方會(huì)自動(dòng)變,不需要改。
PreViewVideoWindow
3、接下來(lái)的這一步不需要改,直接點(diǎn)“完成”就行了。
這時(shí),我們的工程里就多出一個(gè)新的空白窗體來(lái)了,而且項(xiàng)目窗口里也會(huì)自動(dòng)創(chuàng)建出窗體的類來(lái)。
新窗體類
此時(shí),我們的新窗體就創(chuàng)建完成了。
要注意的地方是:這個(gè)窗體此時(shí)在工程運(yùn)行時(shí)并不存在,如果要把它顯示出來(lái),我們需要用工用代碼去創(chuàng)建它顯示它并控制它。在工程里只有主窗體是自動(dòng)創(chuàng)建并顯示出來(lái)的,其它窗體都需要我們手動(dòng)去操作。
點(diǎn)擊按鈕顯示新窗體
現(xiàn)在我們回到mainwindow.h中,在頭部寫(xiě)入
#include "previewvideowindow.h" //注意,要用引號(hào),不要用<>。
然后在mainwindow中定義一個(gè)變量,用來(lái)存儲(chǔ)這個(gè)新窗體
PreViewVideoWindow *preWindow;
然后在“預(yù)覽”按鈕的槽函數(shù)中寫(xiě)入如下代碼:
void MainWindow::on_btn_PreView_clicked()
{
//創(chuàng)建窗體實(shí)例
preWindow=new PreViewVideoWindow(this); //注意要有this,就不用自己刪除了
//設(shè)置窗體關(guān)閉時(shí)自動(dòng)刪除類實(shí)例
//如果不設(shè)置這個(gè),關(guān)閉窗體時(shí)只是隱藏了它,并沒(méi)有銷毀
preWindow->setAttribute(Qt::WA_DeleteOnClose, true);
//顯示出窗體
preWindow->show();
}
我這代碼是點(diǎn)擊時(shí)就會(huì)新建窗體,并設(shè)置好在窗體關(guān)閉時(shí)自動(dòng)刪除它的實(shí)例。這個(gè)按鈕每次點(diǎn)擊都會(huì)出現(xiàn)一個(gè)新窗口,如果您想實(shí)現(xiàn)只出現(xiàn)一個(gè)窗口的情況,就需要自己去設(shè)置檢查并維護(hù)一個(gè)變量來(lái)判斷了,因?yàn)槲也恍枰晕疫@里就沒(méi)有做。
新窗體顯示成功
看,新窗體顯示出來(lái)了,但是,它右上角怎么有個(gè)問(wèn)號(hào)按鈕呢?下面我們把它去掉,在previewvideowindow.cpp中構(gòu)造函數(shù)里寫(xiě)入如下代碼:
PreViewVideoWindow::PreViewVideoWindow(QWidget *parent) :
QDialog(parent),
ui(new Ui::PreViewVideoWindow)
{
ui->setupUi(this);
//就是這句,這個(gè)是用來(lái)設(shè)置窗體樣式的,現(xiàn)在讓它只顯示一個(gè)關(guān)閉按鈕。
this->setWindowFlags(Qt::Dialog|Qt::WindowCloseButtonHint);
}
成功去掉問(wèn)號(hào)按鈕
下一節(jié)讓這個(gè)新窗體能顯示視頻,期待。
*請(qǐng)認(rèn)真填寫(xiě)需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。