赞
踩
#include<QPushButton>//头文件 myWidget::myWidget(QWidget *parent) : QWidget(parent) { //方法1 QPushButton *btn=new QPushButton; //btn->show();//以顶层方式显示 btn->setParent(this);//在myWidget窗口中 btn->setText("按钮");//显示文本 //方法2 QPushButton * btn2=new QPushButton("按钮2",this); btn2->move(100,100);//移动按钮 resize(600,400);//重置按钮 setWindowTitle("窗口");//设置窗口标题 setFixedSize(600,400);//设置窗口固定大小 //参数:信号发送者 发送的信号(函数的地址) 信号接收者 处理的槽函数(函数地址) connect(btn,&QPushButton::clicked,this,&QWidget::close); //功能:点击btn按钮关闭窗口 }
1.自定义信号: 写在signals下,void,需要声明,不需要实现,可以有参数,可重载。
2.槽: 写在public下,void,需要声明,需要实现,可有参数,可发生重载。
3.断开信号: disconnect
4.emit: 使用emit关键字发送信号
5.示例关键代码如下:
1.widget.cpp
Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //创建对象 this->zt=new Teacher(this); this->st=new Student(this); //不带参数自定义信号和槽 //连接 // connect(zt,&Teacher::hu,st,&Student::treat); //调用函数 // classIsOver(); //带参数 //函数指针-》函数地址 void(Teacher::*ts)(QString)=&Teacher::xk; void(Student::*ss)(QString)=&Student::treat; connect(zt,ts,st,ss); classIsOver(); } void Widget::classIsOver() { //触发信号 //emit zt->xk(); emit zt->xk("计算机作业"); }
2.widget.h
#include <QWidget> #include"teacher.h" #include"student.h" class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); private: Ui::Widget *ui; Teacher *zt; Student *st; void classIsOver(); };
3.student.cpp
#include "student.h" #include<qdebug> void Student::treat() { qDebug()<<"下课"; } void Student::treat(QString foodName) { //显示布置“foodName的内容” // qDebug()<<"布置"<<foodName; qDebug()<<"布置"<<foodName.toUtf8().data(); //QString ->chat *:先转成QByteArray再转chat*,消“” }
4.teacher.h和student.h
class Teacher : public QObject { Q_OBJECT public: explicit Teacher(QObject *parent = nullptr); signals: //自定义信号,void,需要声明,不需要实现,可以有参数,可以重载 void xk(); void xk(QString foodName); }; class Student : public QObject { Q_OBJECT public: explicit Student(QObject *parent = nullptr); //槽函数:void,需要声明,需要实现,可有参数,可发生重载 void treat(); void treat(QString foodName); signals: };
6.效果图:
(1) [函数对象参数] (操作符重载函数参数) mutable->返回值{函数体}
(2) [] () {}()
(1)空
(2)= : 值传递,所在作用范围内所有可见局部变量。
(3)&: 引用传递方式,所在作用范围内所有可见局部变量。
(4)this: 所在类中成员变量。
(5)a: 将a按值进行传递。
(6)&a: 将a按引用进行传递。
//将“下课”按钮-》"lambda"按钮
[=](){
btn->setText("lambda");
}();
//演示将(5)a按值传递
QPushButton *btn2=new QPushButton("a",this);
this->resize(600,400);
btn2->move(100,100);
[btn2](){
btn2->setText("lambda2");
//btn->setText("lambda");//’btn‘ is not captured
}();
//输出 ret=100
int ret=[]()->int{return 100;}();
qDebug()<<"ret="<<ret;
//利用lambda表达式,实现点击按钮,关闭窗口
QPushButton *btn3=new QPushButton;
btn3->setText("关闭");
btn3->move(100,0);
btn3->setParent(this);
connect(btn3,&QPushButton::clicked,this,[=](){
this->close();
emit zt->xk("计算机");
});
//结果:点击”关闭“按钮,窗口关闭并输出(布置 计算机)
(1)效果:
(2)代码:
#include "mainwindow.h" #include<QMenuBar> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { resize(600,400); //创建菜单栏(最多只能有一个) QMenuBar *bar=menuBar(); setMenuBar(bar);//将菜单栏放入窗口中 //创建菜单 QMenu *fMenu=bar->addMenu("文件"); QMenu *eMenu=bar->addMenu("编辑"); //创建菜单项(在菜单“文件”下) fMenu->addAction("新建"); fMenu->addSeparator();//添加分割线 fMenu->addAction("打开"); }
(1)效果:
(2)代码:
#include "mainwindow.h" #include<QMenuBar> #include<QToolBar> #include<QDebug> #include<QPushButton> //工具栏(可以有多个) QToolBar *tBar=new QToolBar(this); //将工具栏放在窗口中的左边(Qt::LeftToolBarArea) addToolBar(Qt::LeftToolBarArea,tBar); //设置只允许左右停靠(默认在窗口中,工具栏可移动到四周停靠) tBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea); //设置不允许浮动 tBar->setFloatable(false); //设置不能移动(总开关) tBar->setMovable(false); //设置内容:1.与菜单栏写法一样 tBar->addAction("新建"); tBar->addSeparator(); tBar->addAction("打开"); //2.和上面菜单公用的写法 //QAction *newAction=fMenu->addAction("新建"); //QAction *openAction=fMenu->addAction("打开"); //tBar->addAction(newAction); //tBar->addAction(openAction); //添加控件 QPushButton *btn=new QPushButton("按钮",this); tBar->addWidget(btn);//将按钮放入工具栏中
(1)效果:
(2)代码:
#include<QStatusBar> #include<QLabel> #include<QDockWidget> #include<QTextEdit> //状态栏(最多一个) QStatusBar *sBar=statusBar(); setStatusBar(sBar);//放入窗口中 //标签控件 QLabel *label=new QLabel("提示信息",this); sBar->addWidget(label); QLabel *label2=new QLabel("提示信息(右)",this); sBar->addPermanentWidget(label2);//在右侧加入提示信息 //铆接部件(浮动窗口) 可以有多个 QDockWidget *dw=new QDockWidget("浮动窗口",this); addDockWidget(Qt::BottomDockWidgetArea,dw);//位于核心/中心的下边 //设置浮动窗口只允许上下停靠 dw->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea); //设置中心部件(只能有一个) QTextEdit *edit=new QTextEdit(this); setCentralWidget(edit);
1.前操作:
首先点击界面文件中XXX.ui进行界面设计,设计如下:
tips:工具栏添加首先只能为英文,需要在右下角框中、text后修改为中文。
2.图标添加:
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); // ui->actionnew->setIcon(QIcon("D:/Image/a"));//添加图标 //使用添加Qt资源 //1.复制需要的文件-》点击项目(.cpp)右键-》在Explorer中显示-》粘贴 //2.在Qt项目(总项目)中右键-》添加新文件-》Qt.Qt Resource File-》编辑信息并生产资源文件 //3.点击资源文件下的XXX.qrc的右键-》Open in Editor-》添加前缀(前缀:/ 或其他)-》添加文件(选种图片后点击打开) //4.编译后可出现名为/的文件(图片在里面) ui->actionnew->setIcon(QIcon(":/Image/a"));//格式为":+前缀名+文件名" ui->actionopen->setIcon(QIcon(":/Image/b")); } MainWindow::~MainWindow() { delete ui; }
3.效果图:
(1)效果:
(2)代码:
#include "mainwindow.h" #include "ui_mainwindow.h" #include<QDialog> #include<QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); //点击新建按钮,弹出一个对话框 connect(ui->actionnew,&QAction::triggered,[=](){ //模态对话框(不可以对其他窗口操作,具有阻塞功能) // QDialog dlg(this); // dlg.resize(200,100); // dlg.exec(); // qDebug()<<"模态对话框阻塞功能测试"; //非模态对话框(可以对其他窗口操作) QDialog *dlg2=new QDialog(this);//防止窗口一闪而过 dlg2->resize(200,100); dlg2->show(); dlg2->setAttribute(Qt::WA_DeleteOnClose);//防止内存泄漏 }); } MainWindow::~MainWindow() { delete ui; }
(1)提问对话框效果:
(2)代码:
#include "mainwindow.h" #include "ui_mainwindow.h" #include<QDialog> #include<QDebug> #include<QMessageBox> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); //点击新建按钮,弹出一个对话框 connect(ui->actionnew,&QAction::triggered,[=](){ //消息对话框 //QMessageBox 静态成员函数 //参数:父亲 标题 提示内容 按键类型 默认关联回车按键 //1.错误对话框(框名为critical,内容为叉图标和错误文字) //QMessageBox::critical(this,"critical","错误"); //2.信息对话框 //QMessageBox::information(this,"info","信息"); //3.提问对话框 //QMessageBox::question(this,"ques","提问");//(默认显示Yes和No按钮) //显示Save和Cancel按钮,设置默认回车按键为Cancel //返回值 也是StandardButton类型,利用返回值判断用户的输入 if(QMessageBox::Save ==QMessageBox::question(this,"ques","提问",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel)) { qDebug()<<"选择的是保存"; } else { qDebug()<<"选择的是取消"; } //4.警告对话框 // QMessageBox::warning(this,"warning","警告"); }); }
#include "mainwindow.h" #include "ui_mainwindow.h" #include<QDialog> #include<QDebug> #include<QMessageBox> #include<QColorDialog> #include<QFileDialog> #include<QFontDialog> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); //点击新建按钮,弹出一个对话框 connect(ui->actionnew,&QAction::triggered,[=](){ //其他对话框 //1.颜色对话框 QColor(r,g,b,透明度) //返回值为颜色数值 // QColor col= QColorDialog::getColor(QColor(135,209,255)); // qDebug()<<"r="<<col.red()<<",g="<<col.green()<<",b"<<col.blue(); //2.文件对话框 参数:父亲 标题 默认打开路径 过滤文件格式 //点击新建,自动打开桌面显示过滤后的txt和文件夹 //返回值为 选取的路径 // QString str= QFileDialog::getOpenFileName(this,"打开文件","C:\\Users\\佳\\Desktop","(*.txt)"); // qDebug()<<str; //3.字体对话框 bool f; QFont font=QFontDialog::getFont(&f,QFont("宋体",36)); qDebug()<<"字体:"<<font.family().toUtf8().data()<<",字号:"<<font.pointSize()<<",是否加粗:"<<font.bold()<<",是否倾斜:"<<font.italic(); }); } //QInputDialog :允许用户输入一个值,并将其值返回 //QMessageBox :模态对话框 //QPageSetupDialog :为打印机提供纸张相关的选项 //QPrintDialog :打印机配置 //QPrintPreviewDialog :打印预览 //QProgressDialog :显示操作过程
(1)QPushButton : 常用按钮
(2)QToolButton: 工具按钮可,用于显示图片
(3)radioButton: 单选按钮
(4)checkbox: 多选按钮,可监听状态
1.界面图:
2.有关代码:
#include "widget.h" #include "ui_widget.h" #include<QDebug> Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //1.设置单选按钮,默认男 //自定义按钮名:rBtnMan ui->rBtnMan->setChecked(true); //选中"女"后,打印信息 connect(ui->rBtnWoman,&QRadioButton::clicked,[=](){ qDebug()<<"性别:女"; }); //2.多选按钮 //自定义按钮名:cBa //输出:2(选中) 0(未选中) //1:半选(需要在属性的tristate打勾) connect(ui->cBa,&QCheckBox::stateChanged,[=](int state){ qDebug()<<state; }); } Widget::~Widget() { delete ui; }
(1)效果图:
(2)代码:
Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //利用listWidget写诗 //法1: QListWidgetItem *item=new QListWidgetItem("长风破浪会有时"); //将一行诗放入到listWidget控件中 ui->listWidget->addItem(item); item->setTextAlignment(Qt::AlignHCenter);//设置水平居中 //法2:(缺点:无法设置居中) //QStringList QList<QString> QStringList list; list<<"长风破浪会有时"<<"直挂云帆济沧海"; ui->listWidget->addItems(list); }
(1)效果图:
(2)代码:
Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //treeWidget树控件使用 //1.设置水平头 ui->treeWidget->setHeaderLabels(QStringList()<<"诗人"<<"诗人介绍"); //2.创建根节点 QTreeWidgetItem *titem =new QTreeWidgetItem(QStringList()<<"唐"); QTreeWidgetItem *djitem =new QTreeWidgetItem(QStringList()<<"东晋"); QTreeWidgetItem *sitem =new QTreeWidgetItem(QStringList()<<"宋"); //3.加载顶层的节点(添加根节点到树控件上) ui->treeWidget->addTopLevelItem(titem); ui->treeWidget->addTopLevelItem(djitem); ui->treeWidget->addTopLevelItem(sitem); //4.追加子节点 QStringList poet1; poet1<<"李白"<<"字太白,号青莲居士,诗仙"; QTreeWidgetItem *l1=new QTreeWidgetItem(poet1); titem->addChild(l1); }
(1)效果图:
(2)代码:
Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //设置列数 ui->tableWidget->setColumnCount(3); //设置水平表头 ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄"); //设置行数 ui->tableWidget->setRowCount(5); //设置正文 //1.设置某个单元格 //ui->tableWidget->setItem(0,0, new QTableWidgetItem("李白")); //2.整体设置 QStringList nameList; nameList<<"李白"<<"杜甫"<<"陶渊明"<<"李贺"<<"李清照"; QList<QString> sexList;//等于QStringList sexList<<"男"<<"男"<<"男"<<"男"<<"女"; for(int i=0;i<5;i++) { int col=0; ui->tableWidget->setItem(i,col++,new QTableWidgetItem(nameList[i]));//1 ui->tableWidget->setItem(i,col++,new QTableWidgetItem(sexList.at(i)));//2(1和2可互用) //int转QString:QString::number(18) ui->tableWidget->setItem(i,col++,new QTableWidgetItem(QString::number(18))); } }
(1)栈控件效果图:
(2)代码:
#include "widget.h" #include "ui_widget.h" #include<QMovie> Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //1.栈控件使用 //设置默认定位scrollArea ui->stackedWidget->setCurrentIndex(0); //scrollArea按钮 connect(ui->btn_scroll,&QPushButton::clicked,[=](){ //CurrentIndex可在ui设计界面查看 ui->stackedWidget->setCurrentIndex(0); }); //toolBox按钮 connect(ui->btn_tool,&QPushButton::clicked,[=](){ ui->stackedWidget->setCurrentIndex(2); }); //TabWidget按钮 connect(ui->btn_tab,&QPushButton::clicked,[=](){ ui->stackedWidget->setCurrentIndex(1); }); //2/下拉框 ui->comboBox->addItem("滑板"); ui->comboBox->addItem("自行车"); ui->comboBox->addItem("小电驴"); //点击按钮 选择自行车选项 connect(ui->btn_select,&QPushButton::clicked,[=](){ //法1: //ui->comboBox->setCurrentIndex(1); //法2: ui->comboBox->setCurrentText("自行车"); }); // //利用Qlable显示图片 // ui->lbl_Image->setPixmap(QPixmap(":/Image/a.png")); // //利用Qlabel显示gif动态图片 // QMovie *movie =new QMovie(":/XX.gif"); // ui->lbl_movie->setMovie(movie); // movie->start();//播放 }
内容来自:b站最新QT从入门到实战完整版|传智教育。
如有错误,欢迎指出。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。