qt代码片段

qt代码片段,第1张

qt代码片段 11 自定义信号和槽发生重载的解决

信号

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);//消锯齿 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5703125.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存