1.用户类声明
使用信号槽必须加宏: Q_OBJECT
【C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐式的,类构造函数默认情况下即声明为implicit(隐式).】
2.主函数部分
3. 配置文件.pro文件
4.如果窗口需要依附于另一个窗口,则需要给该窗口指定父类。
5. 从QObject类派生而来的类,具有内存自动回收机制。(父类析构时,先析构子类)
6. 信号和槽函数
【在qt5中槽函数可以是任意类成员函数,全局函数,静态函数,lambda表达式(隐式函数)】
connect(&信号发出对象,&发出的信号,&信号接受对象,&处理信号的槽函数);
//connect(对象,发出的信号,对象,处理信号的槽函数);
connect(&b1,&QPushButton::clicked,this,&MyWidget::close);
槽函数的特性:
(1)槽函数没有返回值;
(2)槽函数需要与信号函数对应;
(3)槽函数的参数 是为了接收信号传过来的数据;
(4)参函数的参数应该是不大于信号参数的个数,可以少于;
(5)槽函数可以重载;
7.信号函数
//发送信号
emit sigSub();
8.函数指针
int f(int a, long b);
int (*fp)(int, long) = f;
9.Qstring类型转换
Qstring--->char*
Qstring str;
str.toUtf8().data();
string--->char*
std::string str;
str.c_str();
10.信号和槽函数可以重载,重载时需要使用函数指针。
11.同一个信号可以连接多个槽,connect可以信号连接信号。
12.对话框
模态对话框:
dlg.exec();//阻塞
非模态对话框:
dlg.setAttribute(Qt::WA_DeleteOnClose);
dlg->show(); //非阻塞(/|\保证完成工作之前不被析构)
提示对话框:
#include <QMessageBox>
QMessageBox::about(this,"Tips","hello");
if(QMessageBox::Ok == QMessageBox::question(this,"Tips","hello",QMessageBox::Ok|QMessageBox::Cancel))
{
}
13.设置停靠窗口
//设置停靠窗口
QDockWidget *dockWidget = new QDockWidget(tr("Dock Widget"), this);
dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
14.动态修改CentralWidget
centralWidget()->setParent(0);
//新的CentralWidget
setCentralWidget(_newCentral);
15.分裂器
QSplitter *splitter= new QSplitter;
splitter->addWidget(t_widget);
splitter->addWidget(p_widget);
splitter->setStretchFactor(1,3);
splitter->show();
//setCentralWidget(splitter);