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 选择图标