一、QPushButton
1、設置背景色:
ui->pushButton->setStyleSheet("background-color: rgb(170, 0, 255)";);
2、設置鼠標放上去的提示語
在設計師界面,設置按鈕的tooltip
二、QTextEdit
1、判斷是否為空
QString str = ui->textEdit->toPlainText();//獲取內容
if(str.isEmpty()) {do something}
2、末尾追加字符串,換行
直接用QTextEdit.append()函數;注意此函數在追加的時候會在新的一行追加
3、判斷內容是否已經改變
ui->textEdit->document().isModified();//如果改變
4、通過HTML方式設置顏色(轉)
void MainWindow::stringToHtmlFilter(QString &str)//將HTML不能識別的字符轉化為能夠識別的
{
str.replace("&","&");
str.replace(">",">");
str.replace("<","<");
str.replace("\"",""");
str.replace("\'","'");
str.replace(" "," ");
str.replace("\n","<br>");
str.replace("\r","<br>");
}
void MainWindow::stringToHtml(QString &str, QColor crl)//根據傳入的顏色設置成HTML字符串
{
QByteArray array;
array.append(crl.red());
array.append(crl.green());
array.append(crl.blue());
QString strC(array.toHex());
str = QString("<span style=\" color:#%1;\">%2</span>").arg(strC).arg(str);
}
ui->textEdit->insertHtml(htmlStr);
5、通過設置格式的方式改變顏色
QString appendStr("testAAtest");//給AA添加顏色
int postionOfAA = appendStr.indexOf("AA",0,Qt::CaseInsensitive);//AA在這個字符串中的位置
QTextCursor tempCursor = ui->textEdit->textCursor();//獲取控件光標指針
int num1 = tempCursor.position();//之前光標的位置
ui->textEdit->append(appendStr);//添加信息
tempCursor.setPosition(num1 + postionOfAA + 1);//將光標初始位置設置在第一個A前面,+1是因為有個回車符號
tempCursor.setPosition(num1 + postionOfAA + 1 + 2,QTextCursor::KeepAnchor);//使光標位置固定,拖動到下兩個字符,選中AA
QColor color(255,0,0);//定義一個紅色QColor變量
QTextCharFormat fmt;//定義一個QTextCharFormat變量
fmt.setForeground(color);//顏色設置為紅色
tempCursor.setCharFormat(fmt);//給這個光標對象設置這個格式變量
tempCursor.clearSelection();//設置顏色之后取消選中的位置
6、獲取行數
ui->textEdit->document()->lineCount()
7、設置scrollbar的樣式
ui->textEdit->verticalScrollBar()->setStyleSheet(
"QScrollBar:vertical{width:8px;background:rgba(0,0,0,0%);margin:0px,0px,0px,0px;padding-top:9px;padding-bottom:9px;}"
"QScrollBar::handle:vertical{width:8px;background:rgba(0,0,0,25%);border-radius:4px;min-height:20;}"
"QScrollBar::handle:vertical:hover{width:8px;background:rgba(0,0,0,50%);border-radius:4px;min-height:20;}"
);
8、設置最多行數
ui->textEdit->document()->setMaximumBlockCount(1000);//最多行數限制
9、滑動條移動,內容不滾動
QScrollBar* tempScrollBar = ui->textEdit_8->verticalScrollBar();
int scrollPosition = tempScrollBar->sliderPosition();
ui->textEdit_8->setText("需要添加的內容");
tempScrollBar->setSliderPosition(scrollPosition);
10、末尾追加時不換行
ui->textEdit->moveCursor(QTextCursor::End);
ui->textEdit->insertPlainText(info);
11、插入表格
QTextCursor cursor(this->ui->textEdit->textCursor()); cursor.movePosition(QTextCursor::Start); QTextTable* _table=cursor.insertTable(1,2); _table->cellAt(0,0).firstCursorPosition().insertHtml("時間"); _table->cellAt(0,1).firstCursorPosition().insertHtml("日志信息");
三、QComboBox
1、添加項
直接在ui界面右鍵控件-》編輯項目,點+
2、獲取當前的文本
ui->combox->currentText()
3、獲取當前的序號
ui->comboBox->currentIndex()
4、設置當前顯示索引號
ui->comboBox->setCurrentIndex(-1);//-1時顯示空
5、判斷當前值是輸入的還是自己選的
if((ui->comboBox->currentText())==(ui->comboBox>itemText(ui->comboBox->currentIndex())))//目的地址
{
//即使用戶輸入了數據,currentIndex依然是原來選的,所以需要判斷當前text是否與index的相同
}
四、QMessageBox
QMessageBox有幾個靜態函數,舉例一個
QMessageBox::StandardButton tempBtn = QMessageBox::question(NULL,"Notepad","Save to NoTitle?",QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel,QMessageBox::Yes);
if(tempBtn == QMessageBox::Ok)
{
}
else if(tempBtn == QMessageBox::No)
{
}
else if(tempBtn == QMessageBox::Cancel)
{
}
五、使用QTabWidget多個子界面
第一種方式:
1、在主界面添加一個QTabWidget控件
2、添加兩個QWidget的子界面,新建Qt設計師那個,帶ui那種,如:
TcpServer、TcpClient
3、在工程頭文件中聲明兩個子界面的指針變量
TcpServer *tcpServer;
TcpClient *tcpClient;
4、在工程cpp中new出界面對象
this->tcpServer = new TcpServer();
this->tcpClient = new TcpClient();
5、添加子界面
ui->tabWidget->addTab(this->tcpServer,"Tcp&Server");
ui->tabWidget->addTab(this->tcpClient,"Tcp&Client");
第二種:
直接在在tab里面拖控件(卧槽,才曉得可以這樣)
ps:改變tab子名稱
在ui中有個currentTabText,修改即可
六、使用QColorDialog選取顏色
此類在設計師中沒有存在其控件,需要自己用代碼實現。此類提供一個靜態方法getColor()來獲取顏色
QColor color = QColorDialog::getColor(Qt::white,this);//第一個參數是打開是默認顯示的參數,后面是其父類
七、QLineEdit
1、設置顏色
QPalette palette;
QColor myColor(255,0,0);
palette.setColor(QPalette::Text,myColor);
ui->lineEdit->setPalette(palette);
2、設置提示輸入
ui->lineEdit->setPlaceholderText("輸入密碼");
3、設置輸入密碼模式
ui里設置echoMode為password
4、設置字符串右對齊
ui->lineEdit->setAlignment(Qt::AlignRight);
5、設置只輸入數據
QIntValidator validator(0, LONG_MAX, this ); le->setValidator(&validator);
八、QTableWidget
1、屬性設置
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);//選中一行
ui->tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);//可多選
ui->tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{background:skyblue;}"); //設置表頭背景色
ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//設置只讀
ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);//鼠標右鍵發出customContextMenuRequested信號
ui->tableWidget->verticalHeader()->setVisible(false); //隱藏行表頭
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//占滿
2、增加行、列
ui->tableWidget->insertRow(ui->tableWidget->rowCount());//這是在最后面增加一行,在當前增加一行是使用currentRow
ui->tablelWidget->insertColumn(ui->tableWidget->columnCount());//在最后面增加一列,在當前增加一列是使用currentColumn
int rowCount = ui.tableWidget->rowCount() - 1;//獲取總的行號
ui.tableWidget->setItem(rowCount, 0, new QTableWidgetItem(QString(內容)));//設置新增行的0列內容
ui.tableWidget->setItem(rowCount, 1, new QTableWidgetItem(QString(內容)));//設置新增行的1列內容
3、為增加行、列設置內容
ui->tableWidget->setItem(行號,列號,new QTableWidgetItem(QString(內容)));
4、刪除行、列
ui->tableWidget->removeRow(行號);
ui->tableWidget->removeColumn(列號);
5、界面適應數據
ui->tableWidget->resizeRowsToContents();//界面適應數據
ui->tableWidget->resizeColumnsToContents();
6、顯示最后 一行
ui->tableWidget->scrollToBottom();
7、獲取數據
用tableWidget::item::text;
8、判斷某一格子是否為空
NULL==ui->tableWidget->item(i,j)//item可能是空指針,所以不能item.text
9、刪除所有行
ui.tableWidget->clearContents();
ui.tableWidget->setRowCount(0);
10、窗口固定大小,可以設置最后一覽固定大小,那最后一列后邊總有空白,如果要讓每行內容充滿整個表格,需要設置head屬性:
ui.tableWidget->horizontalHeader()->setStretchLastSection(true);
11、設置文字區中
ui->tableWidget->item(i, j)->setTextAlignment(Qt::AlignCenter);//感覺效率不高
12、動態為tablewidget添加窗口
①、新建ui類Test
②、在main里new出ui對象test
③、ui->tabWidget->setCurrentIndex(ui->tabWidget->addTab(test, "test界面"));//addTab返回新增加的界面index
13、設置tablewidget可關閉
在設計師里:
ps:這里的關閉相當於是隱藏,並不會回收內存,上面的數據依舊在跑
14、右鍵雙擊清空
①、在初始化中
ui.tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);//使能鼠標右鍵
②、在初始化中連接鼠標右鍵雙擊信號槽
QObject::connect(ui.tableWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(tableWidgetContextSlot(QPoint)));//tablewidget鼠標右鍵
③、在槽函數中
if (0)//免得有警告
{
qDebug() << pos.rx();
}
ui.tableWidget->clearContents();
ui.tableWidget->setRowCount(0);
15、插入checkBox
1、插入
QTableWidgetItem *check = new QTableWidgetItem; check->setCheckState(Qt::Unchecked); ui.tableWidget->setItem(0, 0, check);
2、使用
if (ui.tableWidget->item(0, 0)->checkState() == Qt::Checked)
{
。。。
}
16、設置相鄰兩行顏色交替
ui.tableWidget->setAlternatingRowColors(true); ui.tableWidget->setStyleSheet("border 0px;color:#6b6d7b;alternate-background-color:red;background:white;");
ps:給這個tablewidget設置了背景色之后,取出里面的控件,無法獲取其控件顏色
17、添加選取顏色的按鈕
①、封裝QPushButton子類:https://www.cnblogs.com/judes/p/9592637.html
②、添加按鈕控件
MyQPushButton* btn = new MyQPushButton(this);//顏色 btn->setColor();//設置隨機顏色 ui.tableWidget->setCellWidget(i, 4, btn); //MyQPushButton是QPushButton子類
③、獲取控件
((MyQPushButton*)ui.tableWidget->cellWidget(i, 4))->palette().color(QPalette::Button);//一定要轉化為指針,否則得不到此控件
18、設置最后一列占滿
tablewidget->horizontalHeader()->setStretchLastSection(true);
19、選中不要虛線
在QSS中:
QTableWidget{
outline:0px;
}
20、自定義控件居中顯示
設置:
WarnLabel* label = new WarnLabel(ui->tableWidget);//狀態,設置大小居中 label->setMinimumSize(30,30); label->setMaximumSize(30,30); label->setObjectName("state"); QWidget* widget = new QWidget(ui->tableWidget); QVBoxLayout *v = new QVBoxLayout; v->addWidget(label); v->setAlignment(label,Qt::AlignCenter); v->setSpacing(0); v->setMargin(0); widget->setLayout(v); ui->tableWidget->setCellWidget(rowCount, 3, widget);
獲取:
ui->tableWidget->cellWidget(rowCount, 3)->findChild<WarnLabel*>("state")->changeColor((Label_Color)query.value("state").toInt());
21、設置某行某列隱藏
setColumnHidden
setRowHidden
九、QTreeWidget
QTreewidget分兩種內容,一是頂層節點,二是子節點
1、設置顯示label
ui->treeWidget->setHeaderLabel("設備總覽");
2、設置圖標
ui->treeWidget->setIcon(0,QIcon);
3、設置頂層節點
QTreeWidgetItem *tempTopItemPc = new QTreeWidgetItem(QStringList()<<"電腦類");
tempTopItemPc->setCheckState(0,Qt::Unchecked);//是否有勾選復選框
4、為頂層節點設置子節點
QTreeWidgetItem *tempSubItem = new QTreeWidgetItem(QStringList()<<"PC001");
tempTopItemPc->addChild(tempSubItem);
5、把頂層節點放在tree中
ui->treeWidget->addTopLevelItem(tempTopItemPc);
6、其他
ui->treeWidget->setDragEnabled(true);//可以拖曳
ui->treeWidget->setAcceptDrops(true);//允許item接受拖曳過來的item
ui->treeWidget->setRootIsDecorated(false);//頂層節點不要裝飾,即頂層節點不能收縮
ui->treeWidget->expandAll(); //結點全部展開
7、遍歷所有item,如果item是想要的項則選中
QTreeWidgetItemIterator it(ui->treeWidget);
while (*it)
{
if ((*it)->text(0) == tabBarStr)
{
(*it)->setSelected(true);
}
else
{
(*it)->setSelected(false);
}
++it;
}
8、遍歷所有item,把具備查詢條件的所有項刪除
// 查找 與軌檢完全一致的項,並返回。
QList<QTreeWidgetItem*> s = ui->treeWidget->findItems(QStringLiteral("軌檢"), Qt::MatchFlag::MatchExactly);
for (auto item : s)
{
delete item;
}
好像ui->treeWidget->takeTopLevelItem(5);也可以
9、把根節點的三角形去掉
10、在項中插入其他控件
void QTreeWidget::setItemWidget(QTreeWidgetItem * item, int column, QWidget * widget)
11、通過樣式表設置三角形為自定義圖片
ui->treeWidget->setStyleSheet("QTreeView::branch:has-children:!has-siblings:closed,\
QTreeView::branch:closed:has-children:has-siblings{border-image: none; image: url(:/new/prefix1/right.png);}\
QTreeView::branch:open:has-children:!has-siblings,\
QTreeView::branch:open:has-children:has-siblings{border-image: none; image: url(:/new/prefix1/bottom.png);}");
加粗為自己的圖片
12、Qlabel
1、設置居中顯示
在設計師里,找到alignment的“水平的”屬性,改為居中
13、QSlider
常用信號
十、QLable
1、加顏色
QPalette p;
p.setColor(QPalette::WindowText,Qt::red);
ui->label->setPalette(p);
十一、QLineEdit
1、設置密碼登錄
ui->lineEdit->setEchoMode(QLineEdit::Normal);//設置輸入時正常顯示輸入文字 ui->lineEdit_2->setEchoMode(QLineEdit::Password);//設置輸入時不顯示文字,顯示特殊字符
2、設置提示
ui->lineEdit->setPlaceholderText("請輸入用戶");//設置提醒文字,在輸入時會自動消失
3、設置只能輸入int
QLineEdit* le = new QLineEdit(log); le->setMaximumWidth(120); QIntValidator validator(0, LONG_MAX, this ); le->setValidator(&validator);