Qt常用函数大全
以下有些函数有重载,需要时查阅Qt手册使用。
QObject类中的函数:
connect(信号指针,信号函数地址,槽指针,槽函数地址) //信号与槽
注1:函数名和&函数名的区别:都代表函数的入口地址,所以加不加都行.
注2:可用emit关键字触发信号
QWidget类中的函数:
void setFixedSize(int 长,int 宽) //设置窗体不可改变大小
void setWindowTitle("名字") //设置窗体名称
bool Close() //关闭窗口
void setAttribute(Qt::WidgetAttribute attribute, bool on = true) //暂时只用到下面一个功能 清除开辟的内存空间
dialog->setAttribute(Qt::WA_DeleteOnClose);
QMainWindow中的函数
注:在所有函数中,一般能添加多个的用add,只能添加一个的用set开头
MenuBar:菜单栏
void setMenuBar(QMenuBar类型的指针) //创建菜单栏。菜单栏只能有一个 所以用set
QMenu addMenu(标题/图标,标题) //添加菜单栏,可以添加多个选项 用add
创建菜单栏后,下一级函数:
addAction(参数如下) //作用是添加选项
addSeparator() //作用是添加分隔符
ToolBar :工具栏
void addToolBar(位置(可默认),QToolBar类型指针) //作用是添加工具栏 默认在上方
addAction(。。。)和addSeparator()和上面一样
StatusBar: 状态栏
void setStatusBar(QStatusBar类型指针) //创建状态栏
void addWidget(Qwidget类型指针,默认参数stretch=0) 例如:
DockWidget:小窗口
void addDockWidgets(位置,QDockWidget类型指针) //添加小窗口
CentralWidget: 中央窗口
void setCentralWidget(QWidget类型指针) //添加中央窗口 例如:
设置图标
void setIcon(const QIcon &icon) //设置图标 例:
QDialog中的函数
dialog->resize(400,300);// 窗口大小设置
dialog->setModal(true);// 模态非模态设置(模态就是必须先处理最前面的窗口)
dialog->show();//显示
dialog->setAttribute(Qt::WA_DeleteOnClose);//delete开辟的空间 该函数是父类widget中的函数 因为子窗口会开辟内存 但不关闭总窗口时不会自动delete 所以需要该函数delete
8种常用的对话框:
颜色对话框:头文件
QColorcolor=QColorDialog::getColor(Qt::red,this);
文件对话框:头文件
QStringfile=QFileDialog::getOpenFileName(this,"打开文件","C:\\","图片文件(*.png *.jpg)");//可调整文件类型
字体对话框:头文件
bool ok;
QFontfont=QFontDialog::getFont(&ok,this);
if(ok)
ui->pushButton_2->setFont(font);
else
qDebug()<<"cancel";
输入对话框:头文件
boolok;
//1. QString input = QInputDialog::getText(this,"输入框","输入什么",QLineEdit::Normal,"hello",&ok);
intintput=QInputDialog::getInt(this,"整数","",0,1,100,1,&ok);
消息对话框:头文件
QMessageBox::about(this,"关于","这里是Qt");//about 关于对话框
QMessageBox::critical(this,"错误警告","你犯错了",
QMessageBox::Ok,QMessageBox::Cancel);//错误对话框
intq=QMessageBox::question(this,"问题对话框","确认有问题吗?",QMessageBox::Ok,QMessageBox::Cancel);//问题对话框
if(q==QMessageBox::Ok)
qDebug()<<"你没毛病";
else
qDebug()<<"你有问题";
QMessageBox::information(this,"信息框","这里是QTaaa",QMessageBox::Ok);//提示对话框
进度对话框:头文件
注:无静态成员函数 需要创建对象或开辟内存
QProgressDialogprogress("复制进度","取消",0,50000,this);
progress.setWindowTitle("复制文件");
progress.setWindowModality(Qt::WindowModal);
progress.show();
for(inti=0;i<=50000;i++)
{
progress.setValue(i);
QCoreApplication::processEvents();//多线程,如大文件复制拷贝时,可以继续做其他事
if(progress.wasCanceled())
break;
if(i==49998)
progress.exec();
}
qDebug("拷贝完成");
错误信息对话框:头文件
需要提前创建errordlg指针并开辟空间
errordlg->setWindowTitle("错误提示");
errordlg->showMessage("错误!");
向导对话框:头文件
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("向导页");
wizard.addPage(createPage1());
wizard.addPage(createPage2());
wizard.exec();
}
控件中的函数
QLable:
label->setText("名字") // 设置文本
ui->label->setText("this two picture hahahahahahahahahaha");
label->move(int长位置,int宽位置) //设置label位置(UI里更方便)
ui->label->adjustSize();//自动调整size
ui->label->setWordWrap(true);//在Label中实现自动换行
ui->label_2->setPixmap(QPixmap(":/image/Image/car.png"));//显示图片信息
ui->label_2->setScaledContents(true);//改变图片大小(适合label大小)
QMovie *mv = new QMovie(":/image/Image/lively_p.gif");
ui->label_3->setMovie(mv);//显示动图
ui->label_3->setScaledContents(true);
mv->start();//动图开始播放
Button按键组:
toolButton中的常用函数:
① void setIcon(QIcon(":+前缀+文件名")) //设置图标
radioButton/checkBox:单选/多选
① void setchecked(bool);
ListWidget :
文字对齐: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
① 设置头标题:
void QTreeWidget::setHeaderLabels(const QStringList &*labels*)
//例如:
ui->treeWidget->setHeaderLabels(QStringList()<<"Name"<<"Address");
② 创建树:
QTreeWidgetItem *item = new QTreeWidgetItem(QStringList()<<"文件1");//创建树
ui->treeWidget->addTopLevelItem(item);
//void QTreeWidget::addTopLevelItem(QTreeWidgetItem *item)
item->setIcon(0,QIcon(":/image/car.png"));//设置图标
③ 创建子树
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
① 设置行列:
ui->tableWidget->setRowCount(3);
ui->tableWidget->setColumnCount(3);
② 设置头标签:
ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"name"<<"sex"<<"age");
③ 填充内容:
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要转成qstring
}
鼠标事件
void Widget::mousePressEvent(QMouseEvent *event)//鼠标按下
{
if(event->button()==Qt::LeftButton)//按下左键
{
qDebug()<<"left";
qDebug() } else if(event->button()==Qt::RightButton)//按下右键 { qDebug()<<"right"; qDebug() } } void Widget::mouseReleaseEvent(QMouseEvent *event)//鼠标释放 { 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)//鼠标移动 { if(event->buttons()&Qt::LeftButton)//鼠标按下拖动 { QPoint temp; temp = event->globalPos()-pos;//找到当前坐标 pos在头文件中定义 QPoint类型 //pos(),是相对于窗口的,以窗口左上角为原点(去除边框)。即pos()给出的是一个相对位置坐标。而globalPos(),给出的是一个绝对坐标。这里pos应该是0,0所以可以不减 效果一样(可画图理解) move(temp);//移动到 } } void Widget::wheelEvent(QWheelEvent *event)//滚轮事件 { if(event->delta()>0)//向前滚动 { ui->textEdit->zoomOut();//字体变小 } else { ui->textEdit->zoomIn(); } } 定时器 使用Timer的两种方式: //1 创建指针、开辟空间、用信号和槽 { ui->setupUi(this); QTimer*timer=newQTimer(this); timer->start(1000); connect(timer,&QTimer::timeout,[&](){ staticintnum; ui->label->setText(QString::number(num++)); }); //2 用定时器事件 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++)); } }