赞
踩
QT学习(2)——qt的菜单和工具栏
1QMainWindow
1.1菜单栏最多有一个
1.1.1 QMenuBar * bar MenuBar();
1.1.2 setMenuBar(bar)
1.1.3 QMenu * fileMenu=bar->addMenu(文件") 创建菜单
1.1.4 QAction * newAction=ileMenu->addAction(新建");创建菜单项;
1.1.5 添加分割线fileMenu->adSeparator();
1.2工具栏可以有多个
1.2.1 QToolBar * toolbar new QToolBar(this);
1.2.2 addToolBar(默认停靠区域,toolbar )Qt::LeftToolBarArea
1.2.3 设置后期停靠区域,设置浮动,设置移动
1.2.4 添加菜单项或者添加小控件
#include "mainwindow.h" #include <QMenuBar> #include <qtoolbar.h> #include <QStatusBar> #include <QLabel> #include <QDockWidget> #include <QTextEdit> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { // 重置窗口大小 resize(600,400); QMenuBar *bar = menuBar(); setMenuBar(bar); QMenu *fileMenu = bar->addMenu("文件"); QMenu *editMenu = bar->addMenu("编辑"); // 创建菜单项, 最多只能有1个 fileMenu->addAction("新建"); // 添加分割符 fileMenu->addSeparator(); QAction *openAc= fileMenu->addAction("打开"); // 工具栏 可以有多个 QToolBar * toolbar = new QToolBar(this); addToolBar(Qt::LeftToolBarArea,toolbar); // 只允许左右停靠 toolbar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea); // 设置浮动 toolbar->setFloatable(false); // 设置移动,总开关 toolbar->setMovable(false); toolbar->addAction("工具"); toolbar->addAction(openAc); // 状态栏,最多一个 QStatusBar *stBar = statusBar(); setStatusBar(stBar); // 放标签控件 QLabel *label = new QLabel("提示信息",this); stBar->addWidget(label); QLabel *labelRight = new QLabel("右侧提示信息",this); stBar->addPermanentWidget(labelRight); // 铆接部件,浮动窗口,可以有多个 QDockWidget * dockWidget = new QDockWidget("浮动",this); addDockWidget(Qt::BottomDockWidgetArea,dockWidget); dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea); // 设置中心组件, 只能有一个 QTextEdit *edit = new QTextEdit(this); setCentralWidget(edit); } MainWindow::~MainWindow() { }
QT学习(2)——qt的菜单和工具栏
写到signals下
返回void
需要声明,不需要实现
可以有参数,可以重戟
返回void
需要声明,也需要实现
可以有参数,可以重载
写到public slot下或者public或者全局函数
// 老师饿了,学生请吃饭
connect(te,&Teacher::hungry,st,&Student::treat);
当自定义信号和槽出现重载
8.1 需要利用还数指针明确指向函数的地址·
8.2void(Teacher::tsignal )QString )=&Teacher::hungry;
8.3 QString转成char *
8.3.1.ToUtf80转为QByteArray
8.3.2.Data0转为Char *
8.4信号可以连接信号
8.5断开信号disconnect
void (Teacher::*teacherSignal)(QString) = &Teacher::hungry;
void (Student::*StudentSlot)(QString) = &Student::treat;
void Student::treat(QString foodName){
// QString -> char * 先转成QByteArray(.toUtf8()) 再转成Char* ()
qDebug() << "请老师吃。。。" << foodName.toUtf8().data();
}
// 用一个按钮调用下课
QPushButton *btn = new QPushButton("下课了",this);
// 重置窗口daxiao
this->resize(600,400);
connect(btn,&QPushButton::clicked,this,&Widget::classIsOver);
// 无参的信号和槽连接
void (Teacher::*teacherSignal2)(void) = &Teacher::hungry;
void (Student::*StudentSlot2)(void) = &Student::treat;
connect(te,teacherSignal2,st,StudentSlot2);
// 信号连接信号
connect(btn,&QPushButton::clicked,te,teacherSignal2);
断开信号disconnect
1、信号是可以连接信号
2、一个信号可以连接多个槽函数
3、多个信号可以连接同一个糟函数
4、信号和槽函数的参数必须类型一一对应
5、信号和槽的参数个数是不是要一致?信号的参数个数可以多余槽函数的参数个数
connect(信号的发送者,发送的信号signal信号),信号接受者,槽函数SLOT)
优点:参数直观
缺点:编译器不会检测爸数类型:
[=](){
btn->setText("aaa");
}();
int ret = []()->int{return 1000;}();
qDebug() << "ret = " << ret;
QPushButton *myBtn1 = new QPushButton(this);
QPushButton *myBtn2 = new QPushButton(this);
myBtn1->move(100,100);
int m = 10;
connect(myBtn1,&QPushButton::clicked,this,
[m]()mutable {m=100+10;qDebug()<< m;});
connect(myBtn2,&QPushButton::clicked,this,
[=](){qDebug()<<m;});
qDebug() << m;
QPushButton * btnClose = new QPushButton;
btnClose->setText("close");
btnClose->move(100,0);
btnClose->setParent(this);
connect(btnClose,&QPushButton::clicked,this,
[=](){
btnClose->setText("关闭");
emit te->hungry("娃哈哈");
// this->close();
});
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。