QT控件學習


一、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("<","&lt;");

str.replace("\"","&quot;");

str.replace("\'","&#39;");

str.replace(" ","&nbsp;");

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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM