1 //写东西写到构造函数 2 //Pro 3 //模块 4 QT +=widgets 5 6 //main.cpp 7 #include<QWidget> 8 #include<QApplication> 9 #include<QPushButton>//按钮 10 int main(int argc,char **argv) 11 { 12 QApplication app(argc,argv); 13 QWidget w; 14 w.setwindowTitle("这是标题"); 15 16 QPushButton b; 17 b.setText("给按钮设置内容"); 18 b.setParent(&w);//指定父对象 19 b.move(100,100);//移动坐标 20 //b.show(); 21 QPushButton b1(&w);//构造函数传参 22 b1.text("内容"); 23 w.show(); 24 /* 25 如果不指定父对象,对象和对象之间是互相独立的,没有关系 26 a指定b为它的父对象,相当于a放在b的上面 27 指定父对象的两种方式: 28 1)setParent 29 2)构造函数传参 30 指定父对象,只需要父对象显示,上面子对象自动显示 31 */ 32 app.exec(); 33 return 0; 34 35 } 36 37 38 //标准信号和槽 39 connect(&b1,&QPushButton::pressed,this,&MainWidget::close); 40 /*&b1: 信号发出者,指针类型 41 **&QPushButton::pressed : 处理信号 发送者的类名::信号名字 42 **this:信号接收者 43 **&MainWidget::close :槽函数,信号处理函数 &接收的类名::槽函数名字 44 */ 45 46 /*自定义槽,普通函数的用法 47 *Qt5:任意的成员函数,普通全局函数,静态函数 48 *槽函数需要和信号一致(参数,返回值) 49 *由于信号都没有返回值,所以,槽函数一定没有返回值 50 */ 51 connect(&b2,&QPushButton::released,this,&MainWidget::mySlot)//mySlot是自定义的 52 void MainWidget::mySlot()//函数实现 53 { 54 b2->setText("123"); 55 } 56 /* 57 信号:短信 58 槽函数:接收短信的手机 59 */ 60 61 //固定大小宽度函数:resize(400,400); 62 63 //自定义信号 例如子窗口传递信号给父窗口 父窗口决定怎么处理 64 signals: 65 /* 66 信号必须有signals关键字来声明 67 信号没有返回值,但可以有参数 68 信号就是函数的声明,只需声明,无需定义 69 使用:emit mySignal(); //在本身产生信号做槽函数,槽函数发射信号 emit mySignal 70 信号可以重载 71 */ 72 void mySignal(); 73 void mySignal(int,QString); 74 75 //信号与槽:Qt对象之间通信的接口 76 //3include<QDebug> Qt的打印 用法 qDebug()<<变量 77 //字符串变量转码 str.toUtf8().data(); 78 79 80 //Lambda表达式,匿名函数对象 81 //C++增加的新特性,项目文件:CONFIG += C++11 82 //Qt配合信号一起使用,非常方便 83 QPushButton *b4 = new QPushButton(this); 84 b4->setText("Lambda表达式"); 85 b4->move(150,150); 86 connect(b4,&QPushButton::released,[=]()mutable //[]里用于传参 87 { //=:把外部所有局部变量类中所有成员以值方式传递 88 qDebug() << "1111" //mutable可变的 变量可被修改 89 } //this:类中所有成员以值方式传递 90 ); //&:把外部所有局部变量,引用符号 91 resize(400,400);//固定大小 92 93 94 //坐标系统 95 /*对于父窗口(主窗口),坐标系统相对于屏幕 96 原点:相对于屏幕左上角 97 x:往右递增 98 y:往下递增 99 */ 100 /*对于子窗口(主窗口),坐标系统相对于父窗口 101 原点:相对于窗口空白区域左上角(不包括边框) 102 x:往右递增 103 y:往下递增 104 */ 105 106 //动态分配内存机制 107 /*指定父对象后 直接或间接继承于QObject 108 子对象如果是动态分配空间的new,不需要手动释放delete 109 系统会自动释放 110 */ 111 112 113 //菜单栏,工具栏,状态栏,核心控件,浮动窗口 114 //基类为QMainWindow 115 116 //所需头文件 菜单栏-- 117 #include<QMenuBar> 118 #include<QMenu> 119 #include<QAction> 120 //菜单栏 121 QMenuBar *mBar = menuBar(); 122 //添加菜单 123 QMenu *pFile = mBar->addMenu("文件"); 124 //添加下拉菜单 125 QAction *pNew->pFile->addAction("新建"); 126 //按下产生信号 处理信号 127 connect(pN,&QAction::triggered,[=](){ 128 qDebug()<<"新建被按下" 129 }); 130 //添加分割线 131 p->File->addSeparator(); 132 133 //工具栏头文件 134 #include<QTiilBar> 135 //工具栏 136 QTiilBar *tooBar = addToolBar("tooBar"); 137 //工具栏添加快捷键 138 toolBar->addAction(pNew); 139 //工具栏添加小控件(用按键) 140 141 //状态栏头文件 142 #include<QStatusBar> 143 #include<QLabel> 144 //状态栏 145 QStatusBar *sBar = statusBar(); 146 QLabel *label = new QLabel(this); 147 label->setText("Normal text file"); 148 sBar->addWidget(label); 149 //addWidget从左往右添加 150 sBar->addWidget(new QLabel("2",this)); 151 //addPermanentWidget 从右往左添加 152 sBar->addPermanentWidget(new QLabel("3",this)); 153 154 //核心控件头文件 eg:文本编辑框 155 #include<QTextEdit> 156 //核心控件 157 QTextEdit *textEdit = new QTextEdit(this); 158 setCentralWidget(textEdit); 159 160 //浮动窗口头文件 161 #include<QDockWidget> 162 //浮动窗口 163 QDockWidget *dock = new QDockWidget(this); 164 addDockWidget(放的位置,dock); 165 //添加控件 eg:添加一个文本编辑框 166 QTextEdit *texxtEdit1 = new QTextEdit(texxtEdit1); 167 dock0->setWidget(texxtEdit1); 168 169 //模态和非模态对话框(模态出来后不能操作后面的对话框) 170 //模态对话框 171 #include<QDialog> 172 dlg.exec(); 173 //非模态对话框 174 dlg.show(); 175 //1.当成成员 176 //2.动态分配内存 177 QDialog *p = new QDialog(this); 178 p->setAttribute(Qt::WA DeleteOnclose);//关闭时释放内存 179 p->show(); 180 181 //标准对话框和文件对话框 182 //关于对话框头文件 183 #include<QMessageBox> 184 //关于对话框 185 QMessageBox::about(this,"about","关于Qt"); 186 //问题对话框 187 //返回一个枚举 Lambda表达式里 188 int ret=QMessageBox::question(this,"question","Are you ok?");//有按钮yes/no 189 switch(ret){ 190 case QMessageBox::Yes: qDebug()<<"i am ok";break; 191 case QMessageBox::No: qDebug()<<"i am bad";break; 192 default:break; 193 } 194 //指定按钮 195 int ret=QMessageBox::question(this,"question","Are you ok?",QMessageBox::OK QMessageBox::Cancel); 196 switch用法一样 197 198 //文件对话框头文件 199 #include<QFileDialog> 200 QString path=QFileDialog::getOpenFileName( ///path:返回的一个路径 201 this, 202 "open", 203 "../", 204 "souce(*.cpp *.h);;Tet(*.txt);;All(*.*)" //指定文件类型查找 205 ); 206 qDebug()<<path; //打印路径