
信号
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");
});
17
QMainWindow创建菜单栏
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条)