(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); //設置彈簧