QT - 一些控件的簡單使用

(QPushButton\QTextEdit\QDateTime\QTableWidget\QTreeWidget\QLCDNumber\QSplitterQStackedWidget\QLabel\QSpacerItem)

    最近在使用QT開發一個軟件,之前已看過QT方面的書籍,但由於是第一次使用QT開發項目,在使用控件上還是不夠熟練。特在此記錄下QT中控件的一些簡單實用的操作,以備不時之需。不定時更新:

1、按鈕控件:QPushButton

1)新建:

QPushButton *btn = new QPushButton("這是按鈕"); //也可指定父窗口,一般默認爲本窗口

2)設置固定大小:即即使窗口的大小發生變化,按鈕控件的大小始終保持在固定大小,

btn->setFixedSize(100,200); //設置按鈕的大小爲100 x 200

3)設置背景圖片:a) 首先需要添加圖片:右鍵點擊工程,選擇“添加新文件”->“Qt Resource File”,點擊“choose”,會出現如下圖所示界面:

    在該界面中,點擊“添加”->“添加前綴”,然後再點擊“添加”->“添加文件”,選擇要添加的圖片即可(.png)格式,如下圖所示:

    當添加完圖片之後,就可以通過StyleSheet來設置背景圖片了:

btn->setStyleSheet("background-image:url(:/new/icon/res/SimStart.png)"); //其中,url即爲在資源文件中所在的位置

4)設置提示文字:當鼠標停在控件上時,會彈出提示文字:

btn->setToolTip("這是一個按鈕");

2、文本框控件:QTextEdit

1)新建:

QTextEdit *textEdit = new QTextEdit();

2)顯示多行數據:

textEdit->insertPlainText("顯示信息"+"\n");  //當顯示完信息之後,會換行

3、時間控件:QDateTime

1)獲取時間:

QDateTime *currentTime = new QDateTime(QDateTime::currentDateTime());

2)顯示時間:

QString currentTimeStr = currentTime->time().toString();

4、表格控件:QTableWidget

1)新建:

QTableWidget *table = new QTableWidget(20,3);    //建立了一個20*3的表格

2)設置表頭:

QStringList tableHeader;
tableHeader << "列1" << "列2" << "列3";
table->setHorizontalHeaderLabels(tableHeader);

3)去掉自帶的行號:

QHeaderView *headerViewRow = table->verticalHeader();
headerViewRow->setHidden(true);

4)使表格的寬度自適應表格控件的寬度:

table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

5)使表格中列的寬度自適應表格中的內容:

table->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
//其中函數中的第一個參數是用於指定某一列的寬度保持不變,一般默認設爲0

5、樹控件:QTreeWidget

1)新建:

QTreeWidget *tree = new QTreeWidget(*parent);    //可以指定父控件,
tree->clear();    //初始化樹

2)設置樹的標題:

tree->setHeaderLabel("這是樹");    //當然也可以隱藏樹的標題

3)建立樹的節點:

QTreeWidgetItem *rootItem = new QTreeWidgetItem(tree);    //添加節點,其中參數表示該節點的父節點
rootItem ->setText(0, fedFileNameStr);    //設置該節點的名稱
rootItem ->setWhatsThis(0, IS_ROOT);    //設置該節點的識別碼,即What This Is? 可以通過該識別碼判斷節點是哪一類型的
rootItem ->setExpanded(true);                //設置自動展開

4)添加右鍵點擊事件:

tree->setContextMenuPolicy(Qt::CustomContextMenu);  //必須要加,否則右鍵點擊彈出菜單無反應
connect(tree,SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(SlotToClickRightItem(QPoint)));

//其中,SlotToClickRightItem(QPoint)爲右鍵點擊響應函數
currentTreeItem = tree->itemAt(clickPos);    //通過點擊的位置判斷點擊的是樹的哪一個節點,如果currentTreeItem 爲空,則表示點擊在空白處

//點擊空白處,彈出右鍵菜單
QMenu *menuNewFed = new QMenu(this);    //創建菜單
menuNewFed->addAction(actNewFed);    //添加菜單項
menuNewFed->exec(QCursor::pos());    //將彈出菜單顯示在鼠標點擊處

5)添加左鍵點擊事件:

connect(tree,SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(SlotToClickTreeItem(QTreeWidgetItem*,int)));

//其中SlotToClickTreeItem(QTreeWidgetItem*,int))爲左鍵點擊響應函數,其中QTreeWidgetItem*參數表示的是點擊的樹的節點元素,
//int型參數表示樹節點元素的列數,通過獲取節點元素的whatThis(colum)來判斷點擊的是哪一種節點元素

6、LED控件控件:QLCDNumber

1)新建:

QLCDNumber *lcd = new QLCDNumber();

2)設置屬性:

lcd ->setFixedHeight(23);                 //設置控件 lcd 的寬度爲23(固定寬度)
lcd ->setSegmentStyle(QLCDNumber::Flat);  //只有當設置爲 flat 風格時,設置顏色纔會生效
lcd ->setStyleSheet("color:yellow; background:black;");

3)顯示數字:

lcd->display("display");    //需是數字類型的字符串

7、分割窗口:QSplitter

1)建立分割窗口:

//參數中,第一個參數表示分割窗口的方式,是水平分割還是垂直分割?第二個參數表示的是要被分割的窗口。

QSplitter *splitterMain = new QSplitter(Qt::Vertical, this);
splitterMain->addWidget(QWidget* widget);        //將控件 widget 添加到 splitterMain 分割窗口中//左中部分隔窗口
QSplitter *splitterLeftCenter = new QSplitter(Qt::Horizontal, splitterMain);
splitterLeftCenter->addWidget(QWidget* widget); //將控件 widget 添加到 splitterLeftCenter分割窗口中

//右中部分隔窗口
QSplitter *splitterRightCenter = new QSplitter(Qt::Vertical, splitterLeftCenter);
splitterRightCenter->addWidget(QWidget* widget); //將控件 widget 添加到 splitterRightCenter 分割窗口中

 //下部分隔窗口
QSplitter *splitterLeftDown = new QSplitter(Qt::Horizontal, splitterMain);
splitterLeftDown->addWidget(QWidget* widget); //將控件 widget 添加到 splitterLeftDown 分割窗口中

2)設置分割窗口的比例

//第一個參數表示的是分割窗口的ID,第二個窗口表示的是比例大小

splitterMain->setStretchFactor(0, 1);       //設定上、中、下三部分的比例爲1:3:1
splitterMain->setStretchFactor(1, 3);
splitterMain->setStretchFactor(2, 1);

splitterLeftCenter->setStretchFactor(0, 2); //設定中間部分的左、右部分的比例爲2:1
splitterLeftCenter->setStretchFactor(1, 2);

3)設置分割條是否可以拖動

//用於指定分隔條是否可以拖動,其中 handle(1) 表示第1條分隔條不可拖動
QSplitterHandle *splitterMainHandle = splitterMain->handle(1);
if(splitterMainHandle)
{
    //Disable the Middle Line, it can't adjust.
    splitterMainHandle->setDisabled(true);
}

4)設置分割條的樣式

splitterMain->setStyleSheet("QSplitter::handle{background-color:white}");   //設置分割條樣式
splitterMain->setHandleWidth(5);                                            //設置分割條寬度

5)設置分割窗口可變

//添加一個佈局,使分隔窗口隨着控件一起變化
mainLayout = new QGridLayout(this);

mainLayout->addWidget(splitterMain, 0, 0);

6)顯示

//顯示
splitterMain->show();

8、堆棧窗口:QStackedWidget

1)新建:

QStackedWidget *stackWindow = new QStackedWidget(this);

2)添加窗口:

stackWindow->addWidget(QWidget *widget);    //其中widget表示建立的窗口控件

3)顯示窗口:

stackWindow->setCurrentIndex(ID);    //其中ID表示堆棧窗口中子窗口的ID號,ID號與添加子窗口的順序有關,從0開始

9、標籤控件:QLabel

1)、新建

QLabel* label     = new QLabel("標籤 ");

2)、設置字體

QFont font("Times", 20);    //第一個參數爲字體格式,第二個參數爲字體大小
label->setFont(font);

10、彈簧控件:QSpacerItem 

現有一個見面如下所示:

想要變成這樣:,即,前一個圖雖然 setSpacing()了,但是在調整窗口代銷時,還是會出現spacing發生變化並且不是很整齊的情況,這是就需要QSpacerItem控件了,該控件是不顯示在窗口中的。

1)、新建

QSpacerItem* spacer = new QSpacerItem(20,20, QSizePolicy::Minimum, QSizePolicy::Expanding);

2)、設置

frameLayout->addWidget(label1); 
frameLayout->addWidget(text1);
frameLayout->addWidget(label2);
frameLayout->addWidget(text2);
frameLayout->addWidget(btn);
frameLayout->addSpacerItem(spacer);    //設置彈簧

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章