存档2020年9月6日

Qt

#include <QDebug>
#include <QString>
#include <QTread>

QSting s1="d:\\";
s1 += "tt";
s1.append("tt");
int pos = s1.indexOf("\\");
s1 = s1.mid(pos+1,QStringLiteral("tt").length());
s1.clear();

str = QString::number(3.14);

Qstring s3="123";
qDebud("d3 value: %s")<< qPrintable(s3)<<endl;
int d3=s3.toInt();
qDebud("d3 value: %d")<< d3<<endl;

QScopedPointer<int> i(new int(3));
QScopedArrayPointer<SPA>spArr(new APS[10]);

class MyThread:public QTread{
public:
    MyThread(){ isStop =false;}
    ~MyThread(){}
    void CloseThread(){isStop = true;}
    void run(){
        while(!isStop){
            qDebud()<< tr("MyThread")<<QThread::currentThreadld();<<endl;
            sleep(10);
        }
    }
private:
    bool isStop;
}

MyThread* pT = new MyThread();
pT->start();

MyThread pT ;
pT.start();

pT.CloseThread();


QPushButton * btn = new QPushButton; //无参构造
//btn->show(); //show用顶层方式弹出
btn->setParent(this); //设置上级
bth->setText("btn"); //将char*隐式转换为QString

QPushButton * btn2 = new QPushButton("btn2",this); //有参构造,窗口按btn2大小显示
this->resize(宽,高);//重置窗口大小
btn2->move(x,y);//按钮移动
btn2->resize(50,50);//按钮大小也可以重置

setWindowTitle("w1");//重置窗口标题setWidgetTitle
setFixedSize(600,400);//设置固定窗口大小

//坐标系X-向右 Y向下

//connect(信号的发送者,发送的信号地址,信号的接收者,处理的函数(槽函数)的地址)
connect(btn,&QPushButton::clicked,this,&QWidget::colose);
//自定类继承public QObject
signals:
    //自定信号,只声明不实现
    void hungry();
public slots:
    //算定槽函数,高版本可以写到public下或全局函数,要声明要实现
    void treat();
    //触发 emit zt->hugry();

//同时也有有参 重载时,利用函数指针明确指向哪个函数的地址
void(T1:: *t1Signal)(QString) = &T1::hungry;
void(S1:: *s1Slot)(QString)=&S1::treat;
connect(t1,t1Signal,s1,s1Slot);
//断开连接
disconnect(t1,t1Signal,s1,s1Slot);
信号与槽参数必须对应,信号的参数个数可以多于槽的参数个数,反之不可以,但必须类型一一对应
connect(zt,SIGNAL(huangry(void)),st,SLOT(treat(void)));//QT4写法,不推荐,类型匹配不检测,当字符串处理,优点,参数类型直观,发生重载不用写函数指针
无参调用有参时可以使用lambda表达式实现

//QString转char* 先转QBtyeArray
QStringName.toUft8.data()

使用lambda表达式C++版本大于11
CONFIG +=  C++11
[](1)-> int {}(2)
[]值引用:空,不使用任何函数对象参数,=值传递方式&引用传递方式,this可以使用所在类的成员变量,a传值默认是const的,要修改传入a的拷贝增加mutable修饰符
(1):参数
-> int:返回值类型
{}:逻辑实现体
(2):()执行
//做信号槽连接时,默认内部变量进行锁状态只读,进行写操作会出错
connect(btn,&QPushButton::clicked,this,[&](){
    btn->setText("dd");//[&]改用[=]
});

connect(ui->actionNew,&QAction::triggered,this,[=](){
        //模态(不可以对其它窗口操作)与非模态(还可以对其它操作)对话框
//        QDialog dlg;
//        dlg.resize(200,100);
//        dlg.exec();  //模态 阻塞

        // 标准调用
        //QMessageBox::critical(this,"错误","critical");
        //QMessageBox::information(this,"信息","infomation");
        //QMessageBox::question(this,"问题","question");
        //QMessageBox::warning(this,"警告","warning");
        if (QMessageBox::Save == QMessageBox::question(this,"问题","question",QMessageBox::Save | QMessageBox::Discard,
                              QMessageBox::Discard)){
            qDebug()<<"Save";
        }else{
            qDebug()<<"Discard";
        };

    });

    connect(ui->actionOpen,&QAction::triggered,this,[=](){
        //模态(不可以对其它窗口操作)与非模态(还可以对其它操作)对话框
        // QDialog dlg2; //一闪而过,应创建在堆上
        //dlg2.resize(200,100);
        //dlg2.show();  //非模态

        QDialog * dlg2 = new QDialog(this);
        dlg2->resize(200,100);
        dlg2->show();  //非模态
        //注意当前对象没有及时释放,防止内存泄露,设置属性关闭弹窗
        dlg2->setAttribute(Qt::WA_DeleteOnClose);

//        QColor color = QColorDialog::getColor(QColor(255,0,0));
//        qDebug()<<color.red() <<color.green() << color.blue();

        QString path = QFileDialog::getOpenFileName(this,"打开文件","c:\\","(*.txt,*.jpg)");
    });

标准对话框
QColorDialog 选择颜色、
QFileDialog 文件
QFontDialog 字体
QInputDialog 允许用户输入一个值,并返回
QMessageDialog 模态对话框
QpageSetupDialog 打印机纸张相关
QPrintDialog 打印配制
QPrintPreviewDialog 打印预览
QProgressDialog 显示操作过程

//    QListWidgetItem  * item = new QListWidgetItem("锄禾日当午");

//    //设置对齐方式
//    item->setTextAlignment(Qt::AlignHCenter);
//    ui->listWidget->addItem(item);

    //QStringList ===  QList<QString>
    QStringList list;
    list << "锄禾日当午"<< "汗滴禾下土"<< "谁知盘中餐"<< "粒粒皆辛苦";
    //QStringList()<<"锄禾日当午"<< "汗滴禾下土"<< "谁知盘中餐"<< "粒粒皆辛苦" 匿名对象也可以直接使用
    ui->listWidget->addItems(list);

//定时器第二种方式
    QTimer * timer1 = new QTimer(this);
    //启动定时器对象
    timer1->start(500); //毫秒做单位
    //每隔0.5秒发送信号
    connect(timer1,&QTimer::timeout,[=](){
        static int num = 0;
        ui->label_4->setText( QString::number(num++));
    });

    //点击按钮 暂停定时器
    connect(ui->pushButton,&QPushButton::clicked,[=](){
        timer1->stop();
    });

设置图标
RC_ICONS = app.ico
MainWindow:windowsIcon 选择图标