由于信号可以重载,则在处理信号的时候,要注意处理方式 Qt5的方法:采用函数指针的方法指向重载的函数
void (SubWidget::*funSignal)() = &SubWidget::mySignal; connect(&w,funSignal,this,&MainWidget::dealSub); void (SubWidget::*testSignal)(int ,QString) = &SubWidget::mySignal; connect(&w,testSignal,this,&MainWidget::dealSlot);Qt4的处理方法:采用宏的方式
//Qt4信号连接 //Qt4槽函数必须有slots关键字来修饰 connect(&w,SIGNAL(mySignal()),this,SLOT(dealSub())); connect(&w,SIGNAL(mySignal(int,QString)),this,SLOT(dealSlot(int,QString))); // SIGNAL SLOT 将函数名字->字符串 不进行错误检查 Lambda表达式 //Lambda表达式 匿名函数 //C++11增加的新特性,项目文件:CONFIG += C++11 //Qt配合信号一起使用非常方便 QPushButton *b4 = new QPushButton(this); b4->setText("Lambda表达式"); b4->move(150,150); connect(b4,&QPushButton::released, // = :把外部所有局部变量,类中所有成员以值传递方式 [=]() { b4->setText("哈哈哈哈!"); qDebug()<<"11111111"; } ); 坐标系统,内存回收机制 菜单栏,工具栏,核心控件,浮动窗口,模态和非模态对话框,标准对话框和文件对话框 #include "mainwindow.h" #include <QMenuBar> #include <QMenu> #include <QAction> #include <QDebug> #include <QToolBar> #include <QPushButton> #include <QStatusBar> #include <QLabel> #include <QTextEdit> #include <QDockWidget> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { //菜单栏 QMenuBar *mBar = menuBar(); //添加菜单 QMenu *pFile = mBar->addMenu("文件"); //添加菜单项,添加动作 QAction *pNew = pFile->addAction("新建"); pFile->addSeparator(); QAction *pOpen = pFile->addAction("打开"); connect(pNew,&QAction::triggered, [=]() { qDebug()<<"新建被按下"; } ); //工具栏,菜单栏的快捷方式 QToolBar *toolbar = addToolBar("toolbar"); //工具栏添加快捷键 toolbar->addAction(pNew); QPushButton *b = new QPushButton(this); //添加小部件 toolbar->addWidget(b); connect(b,&QPushButton::clicked, [=]() { b->setText("123"); } ); //状态栏 QStatusBar *sBar = statusBar(); QLabel *label = new QLabel(this); label->setText("Normal text file"); sBar->addWidget(label); //addWidget 从右往左添加 sBar->addWidget(new QLabel("2",this)); //addPermanentWidget 从右往左添加 sBar->addPermanentWidget(new QLabel("3",this)); //核心控件 QTextEdit *textEdit = new QTextEdit(this); setCentralWidget(textEdit); //浮动窗口 QDockWidget *dock = new QDockWidget(this); addDockWidget(Qt::RightDockWidgetArea,dock); dock->setWidget(textEdit); resize(400,400); } MainWindow::~MainWindow() { } #include "mainwindow.h" #include <QMenu> #include <QMenuBar> #include <QAction> #include <QDialog> #include <QDebug> #include <QMessageBox> #include <QFileDialog> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { QMenuBar *mBar = menuBar(); //setMenuBar(mBar); QMenu *menu = mBar->addMenu("对话框"); QAction *p1 = menu->addAction("模态对话框"); connect(p1,&QAction::triggered, [=]() { QDialog dlg; dlg.exec(); qDebug()<<"11111111111"; } ); QAction *p2 = menu->addAction("非模态对话框"); connect(p2,&QAction::triggered, [=]() { dlg.show(); qDebug()<<"11111111111"; } ); QAction *p3 = menu->addAction("关系对话框"); connect(p3,&QAction::triggered, [=]() { QMessageBox::about(this,"about","关于QT"); } ); QAction *p4 = menu->addAction("问题对话框"); connect(p4,&QAction::triggered, [=]() { int ret = QMessageBox::question(this,"question","Are you ok?", QMessageBox::Ok, QMessageBox::Cancel ); switch (ret) { case QMessageBox::Ok: qDebug()<<"I am Ok"; break; case QMessageBox::Cancel: qDebug()<<"I am bad"; default: break; } } ); QAction *p5 = menu->addAction("文件对话框"); connect(p5,&QAction::triggered, [=]() { QString path = QFileDialog::getOpenFileName( this, "open", "../", "source(*.cpp *.h);;" "Text(*.txt);;all(*.*)" ); qDebug()<<path; } ); } MainWindow::~MainWindow() { }