? ? ? ?Qt常用函數(shù)大全
以下有些函數(shù)有重載,需要時(shí)查閱Qt手冊(cè)使用。
QObject類中的函數(shù):
connect(信號(hào)指針,信號(hào)函數(shù)地址,槽指針,槽函數(shù)地址) //信號(hào)與槽
注1:函數(shù)名和&函數(shù)名的區(qū)別:都代表函數(shù)的入口地址,所以加不加都行.
注2:可用emit關(guān)鍵字觸發(fā)信號(hào)
QWidget類中的函數(shù):
void setFixedSize(int 長,int 寬)? //設(shè)置窗體不可改變大小
void setWindowTitle("名字")? //設(shè)置窗體名稱
bool? Close() //關(guān)閉窗口
void setAttribute(Qt::WidgetAttribute attribute, bool on = true) //暫時(shí)只用到下面一個(gè)功能 清除開辟的內(nèi)存空間
dialog->setAttribute(Qt::WA_DeleteOnClose);
QMainWindow中的函數(shù)

注:在所有函數(shù)中,一般能添加多個(gè)的用add,只能添加一個(gè)的用set開頭
MenuBar:菜單欄
void? setMenuBar(QMenuBar類型的指針)? //創(chuàng)建菜單欄。菜單欄只能有一個(gè) 所以用set
QMenu addMenu(標(biāo)題/圖標(biāo),標(biāo)題)? //添加菜單欄,可以添加多個(gè)選項(xiàng) 用add
創(chuàng)建菜單欄后,下一級(jí)函數(shù):
addAction(參數(shù)如下)? //作用是添加選項(xiàng)

addSeparator()? //作用是添加分隔符
ToolBar :工具欄
void addToolBar(位置(可默認(rèn)),QToolBar類型指針)? //作用是添加工具欄? 默認(rèn)在上方

addAction(。。。)和addSeparator()和上面一樣
StatusBar: 狀態(tài)欄
void setStatusBar(QStatusBar類型指針)? //創(chuàng)建狀態(tài)欄
void addWidget(Qwidget類型指針,默認(rèn)參數(shù)stretch=0)? 例如:

DockWidget:小窗口
void addDockWidgets(位置,QDockWidget類型指針)? //添加小窗口

CentralWidget: 中央窗口
void setCentralWidget(QWidget類型指針) //添加中央窗口? 例如:

設(shè)置圖標(biāo)
void setIcon(const QIcon &icon)? //設(shè)置圖標(biāo) 例:

QDialog中的函數(shù)
dialog->resize(400,300);// 窗口大小設(shè)置
dialog->setModal(true);// 模態(tài)非模態(tài)設(shè)置(模態(tài)就是必須先處理最前面的窗口)
dialog->show();//顯示
dialog->setAttribute(Qt::WA_DeleteOnClose);//delete開辟的空間 該函數(shù)是父類widget中的函數(shù)? 因?yàn)樽哟翱跁?huì)開辟內(nèi)存 但不關(guān)閉總窗口時(shí)不會(huì)自動(dòng)delete? 所以需要該函數(shù)delete
8種常用的對(duì)話框:
顏色對(duì)話框:頭文件<QColorDialog>
QColorcolor=QColorDialog::getColor(Qt::red,this);

文件對(duì)話框:頭文件<QFileDialog>
QStringfile=QFileDialog::getOpenFileName(this,"打開文件","C:\\","圖片文件(*.png *.jpg)");//可調(diào)整文件類型
字體對(duì)話框:頭文件<QFontDialog>
bool ok;
QFontfont=QFontDialog::getFont(&ok,this);
if(ok)
ui->pushButton_2->setFont(font);
else
qDebug()<<"cancel";

輸入對(duì)話框:頭文件<QInputDialog>
boolok;
//1. QString input = QInputDialog::getText(this,"輸入框","輸入什么",QLineEdit::Normal,"hello",&ok);
intintput=QInputDialog::getInt(this,"整數(shù)","",0,1,100,1,&ok);

消息對(duì)話框:頭文件<QMessageBox>
? ? QMessageBox::about(this,"關(guān)于","這里是Qt");//about 關(guān)于對(duì)話框
QMessageBox::critical(this,"錯(cuò)誤警告","你犯錯(cuò)了",
QMessageBox::Ok,QMessageBox::Cancel);//錯(cuò)誤對(duì)話框
intq=QMessageBox::question(this,"問題對(duì)話框","確認(rèn)有問題嗎?",QMessageBox::Ok,QMessageBox::Cancel);//問題對(duì)話框
if(q==QMessageBox::Ok)
qDebug()<<"你沒毛病";
else
qDebug()<<"你有問題";
QMessageBox::information(this,"信息框","這里是QTaaa",QMessageBox::Ok);//提示對(duì)話框

進(jìn)度對(duì)話框:頭文件<QProgressDialog>
注:無靜態(tài)成員函數(shù)? 需要?jiǎng)?chuàng)建對(duì)象或開辟內(nèi)存
QProgressDialogprogress("復(fù)制進(jìn)度","取消",0,50000,this);
progress.setWindowTitle("復(fù)制文件");
progress.setWindowModality(Qt::WindowModal);
progress.show();
for(inti=0;i<=50000;i++)
?? {
progress.setValue(i);
QCoreApplication::processEvents();//多線程,如大文件復(fù)制拷貝時(shí),可以繼續(xù)做其他事
if(progress.wasCanceled())
break;
if(i==49998)
progress.exec();
?? }
qDebug("拷貝完成");

錯(cuò)誤信息對(duì)話框:頭文件<QErrorMessage>
需要提前創(chuàng)建errordlg指針并開辟空間
errordlg->setWindowTitle("錯(cuò)誤提示");
errordlg->showMessage("錯(cuò)誤!");

向?qū)?duì)話框:頭文件<QWizard>
QWizardPage* createPage1()
{
QWizardPage*? page = new QWizardPage;
page->setTitle("頁面1");
return page;
}
QWizardPage* createPage2()
{
QWizardPage*? page = new QWizardPage;
page->setTitle("頁面2");
return page;
}
void MainWindow::on_pushButton_8_clicked()
{
QWizard wizard(this);
wizard.setWindowTitle("向?qū)ы?);
wizard.addPage(createPage1());
wizard.addPage(createPage2());
wizard.exec();
}

控件中的函數(shù)
QLable:
label->setText("名字") // 設(shè)置文本
ui->label->setText("this two picture hahahahahahahahahaha");
label->move(int長位置,int寬位置)? //設(shè)置label位置(UI里更方便)
ui->label->adjustSize();//自動(dòng)調(diào)整size
ui->label->setWordWrap(true);//在Label中實(shí)現(xiàn)自動(dòng)換行
ui->label_2->setPixmap(QPixmap(":/image/Image/car.png"));//顯示圖片信息
ui->label_2->setScaledContents(true);//改變圖片大?。ㄟm合label大?。?/p>
QMovie *mv = new QMovie(":/image/Image/lively_p.gif");
ui->label_3->setMovie(mv);//顯示動(dòng)圖
ui->label_3->setScaledContents(true);
mv->start();//動(dòng)圖開始播放
Button按鍵組:
toolButton中的常用函數(shù):
① void setIcon(QIcon(":+前綴+文件名"))? //設(shè)置圖標(biāo)
radioButton/checkBox:單選/多選
① void? setchecked(bool);
ListWidget :

文字對(duì)齊:void QListWidgetItem::setTextAlignment(int alignment)

例子:
ui->listWidget->addItem("nihao");
ui->listWidget->addItem("123");
QListWidgetItem *item = new QListWidgetItem("this is a ptr");
item->setTextAlignment(Qt::AlignRight);
ui->listWidget->addItem(item);
QStringList label1;
label1<<"haha"<<"sadasd"<<"s什么"<<"111";
ui->listWidget_2->addItems(label1);
Tree Widget

① 設(shè)置頭標(biāo)題:
void QTreeWidget::setHeaderLabels(const QStringList &*labels*)
//例如:
ui->treeWidget->setHeaderLabels(QStringList()<<"Name"<<"Address");
② 創(chuàng)建樹:
QTreeWidgetItem *item = new QTreeWidgetItem(QStringList()<<"文件1");//創(chuàng)建樹
ui->treeWidget->addTopLevelItem(item);
//void QTreeWidget::addTopLevelItem(QTreeWidgetItem *item)
item->setIcon(0,QIcon(":/image/car.png"));//設(shè)置圖標(biāo)
③ 創(chuàng)建子樹
QTreeWidgetItem *child1 =? new QTreeWidgetItem(QStringList()<<"child1"<<"child2");
QTreeWidgetItem *child2 =? new QTreeWidgetItem(QStringList()<<"child2"<<"child2");
item->addChild(child1);
item->addChild(child2);
//void QTreeWidgetItem::addChild(QTreeWidgetItem *child)
TableWidget

① 設(shè)置行列:
ui->tableWidget->setRowCount(3);
ui->tableWidget->setColumnCount(3);
② 設(shè)置頭標(biāo)簽:
? ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"name"<<"sex"<<"age");
③ 填充內(nèi)容:
QStringList? namelist;
namelist<<"rick"<<"aaa"<<"李平";
QStringList? sexlist;
sexlist<<"man"<<"woman"<<"man";
QStringList? agelist;
agelist<<"15"<<"20"<<"25";
for(int i =0;i<3;i++)
{
int col =0;
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(namelist[i]));
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(sexlist[i]));
// ui->tableWidget->setItem(i,col,new QTableWidgetItem(agelist[i])); //也可以
ui->tableWidget->setItem(i,col,new QTableWidgetItem(QString::number(20)));//int要轉(zhuǎn)成qstring
}
鼠標(biāo)事件
void Widget::mousePressEvent(QMouseEvent *event)//鼠標(biāo)按下
{
if(event->button()==Qt::LeftButton)//按下左鍵
{
qDebug()<<"left";
qDebug()<globalX()<<" "<globalY();//顯示坐標(biāo)
}
else if(event->button()==Qt::RightButton)//按下右鍵
{
qDebug()<<"right";
qDebug()<globalX()<<" "<globalY();
}
}
void Widget::mouseReleaseEvent(QMouseEvent *event)//鼠標(biāo)釋放
{
qDebug()<<"released";
}
void Widget:: mouseDoubleClickEvent(QMouseEvent *event)//雙擊
{
if(event->button()==Qt::LeftButton)
{
if(windowState()!=Qt::WindowFullScreen)
{
setWindowState(Qt::WindowFullScreen);//全屏
}
else
{
setWindowState(Qt::WindowNoState);//正常顯示
}
}
}
void Widget:: mouseMoveEvent(QMouseEvent *event)//鼠標(biāo)移動(dòng)
{
if(event->buttons()&Qt::LeftButton)//鼠標(biāo)按下拖動(dòng)
{
QPoint temp;
temp = event->globalPos()-pos;//找到當(dāng)前坐標(biāo) pos在頭文件中定義? QPoint類型
//pos(),是相對(duì)于窗口的,以窗口左上角為原點(diǎn)(去除邊框)。即pos()給出的是一個(gè)相對(duì)位置坐標(biāo)。而globalPos(),給出的是一個(gè)絕對(duì)坐標(biāo)。這里pos應(yīng)該是0,0所以可以不減? 效果一樣(可畫圖理解)
move(temp);//移動(dòng)到
}
}
void Widget::wheelEvent(QWheelEvent *event)//滾輪事件
{
if(event->delta()>0)//向前滾動(dòng)
{
ui->textEdit->zoomOut();//字體變小
}
else
{
ui->textEdit->zoomIn();
}
}
定時(shí)器
使用Timer的兩種方式:
//1 ? 創(chuàng)建指針、開辟空間、用信號(hào)和槽
{
ui->setupUi(this);
QTimer*timer=newQTimer(this);
timer->start(1000);
connect(timer,&QTimer::timeout,[&](){
staticintnum;
ui->label->setText(QString::number(num++));
? });
//2 用定時(shí)器事件
timer1=startTimer(500);
timer2=startTimer(2000);
}
voidWidget::timerEvent(QTimerEvent*event)
{
if(event->timerId()==timer1)
?? {
staticintnum2;
ui->label_2->setText(QString::number(num2++));
?? }
elseif(event->timerId()==timer2)
?? {
staticintnum3;
ui->label_3->setText(QString::number(num3++));
?? }
}