信号
signals: void hungry(); void hungry(QString foodName);
发送信号
emit hungry("鸡肉");
槽
void Student::treat(){ qDebug() << "请吃饭"; } void Student::treat(QString foodName){ //QString类型打印会自己带上引号,为了不带引号,需要把QString转为char *类型,用到.toUtf8().data() qDebug() << "请吃饭,吃" << foodName.toUtf8().data(); }
连接信号和槽
//connect(zt,&Teacher::hungry,st,&Student::treat); //由于有重载,信号和槽的地址不能确定为哪一个。 //指针可以指向地址,所以要将函数指针指向函数地址,然后用指针代替 void (Teacher:: *teacherSignal)(QString) = &Teacher::hungry; //返回值(作用域::函数指针)(参数类型) = 函数地址; void (Student:: *studentSlot)(QString) = &Student::treat; connect(zt,teacherSignal,st,studentSlot);14 a
Lambda C++11
匿名函数
[](){}();
中括号
= 值传递
& 应用传递小括号
参数大括号
函数体小括号
负责调用上述声明
b
mutable关键字:用于修饰值传递的变量,修改拷贝,而不是修改值本身
int m = 10; [m]()mutable{//默认m只读。使用关键字改为可修改状态 m = 100 + 10; qDebug() << m; };c. 非void返回
int ret = []()->int{return 1000}(); qDebug() <d. 省略第三个参数this 若用Lambda表达式,且第三个参数是this,可省略this
connect(btn,&QPushButton::clicked,[=](){ btn->setText("aaa"); });17QMainWindow创建菜单栏
QMenuBar * bar = menuBar(); //将菜单栏放入到窗口 serMenuBar(bar); //创建菜单 QMenu * fileMenu = bar->addMenu("文件"); QMenu * editMenu = bar->addMenu("编辑"); //创建菜单项 fileMenu->addAction("新建"); //添加分割线 fileMenu->addSeparator(); fileMenu->addAction("打开"); QToolBar * toolBar = new QToolBar(this); //后期设置,只允许左右停靠。 toolBar->addToolBar(Qt::LeftToolBarAreas ||Qt::RightToolBarAreas) //设置浮动 toolBar->setFloatable(false); //设置移动(总开关) toolBar->setMovable(false); //工具栏中可以设置内容 toolBar->addAction(openAction); //工具栏中添加控件 QPushButton *btn = new QPushButton("aa", this); toolBar->addWidget(btn);代码片段 1. widget透明,内部部件不透明setAttribute(Qt::WA_TranslucentBackground, true);2. widget去除title栏setWindowFlag(Qt::framelessWindowHint);3. 画折线void Switch::paintEvent(QPaintEvent *) { static const QPointF points[3] = { QPointF(15.0, 5.0), QPointF(5.0, 25.0), QPointF(15.0, 45.0), }; QPainter painter(this); painter.setRenderHint(QPainter::SmoothPixmapTransform, true); painter.setRenderHint(QPainter::HighQualityAntialiasing, true); painter.setPen(QPen(QBrush(Qt::darkGray), 4, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); painter.drawPolyline(points, 3); }抗锯齿绘图enum QPainter::RenderHint
QPainter::Antialiasing //原始边缘的抗锯齿绘制 QPainter::TextAntialiasing //文字的平滑绘制,若禁止使用文字抗锯齿,不要使用此hint QPainter::SmoothPixmapTransform //使用平滑的pixmap变换算法(双线性插值算法),而不是近邻插值算 QPainter::HighQualityAntialiasing //过时。使用QPainter::Antialiasing 即可 QPainter::NonCosmeticDefaultPen //过时举例:
painter.setRenderHint(QPainter::Antialiasing, true);//
我们通过这条语句,将Antialiasing属性(也就是反走样)设置为
true。经过这句设置,我们就打开了QPainter的反走样功能。由于反走样需要比较复杂的算法,在一些对图像质量要求不是很高的应用中,是不需要进行反走样的。为了提高效率,一般的图形绘制系统,都是默认不进行反走样的。
举例:
painter->setRenderHints(QPainter::SmoothPixmapTransform);//消锯齿欢迎分享,转载请注明来源:内存溢出
评论列表(0条)