QT开发问题笔记

一、信号槽的connect写法

第一种:

connect(ui->colorBtn,SIGNAL(clicked()),this,SLOT(colorBtn_clicked()));

这种是将字符串传入,编译器不会报错,若没有触发。查问题很困难

建议使用第二种:

connect(ui->treeWidget,&QTreeWidget::currentItemChanged,this,&MainWindow::currentTreeItemChanged);

基本上会触发,而且currentItemChanged 函数是有参数的,不用写上参数了。用这种方式,编译器会检查,推荐。

2、macos下开发,生成的 note.app 文件,右键->显示包内容,还有一个文件夹系统。mac会把所有相关文件全部打包成一个app。

所以访问一些配置文件,如xml,需要把配置文件放到note.app里面的目录下,这样就可以直接访问

考虑使用编译前拷贝的方式,直接在pro文件增加一些命令实现,而不是手动拷贝。而且是否拷贝到note.app下需要好好考虑

说实话mac到处透露着反人类的设计,可能是win用习惯了。主要优点就是续航和触摸板确实给力。其他方面同价位win碾压。

二、信号槽SIGNAL和SLOT

其实这就是两个宏定义:

#define SIGNAL(arg) #arg
#define SLOT(arg) #arg

#代表将arg转化为string字符串,所以传入的就是字符串.

1、单#的作用是把参数变成字符串
2、##的作用是连接组合参数名字;

如下面这个例子:

#include <iostream.h>
using namespace std;

#define TEST0(arg) cout << arg << endl
#define TEST1(arg) cout << #arg << endl
#define TEST2(arg) cout << i##arg << endl
#define TEST3(arg) cout << arg##t << endl
#define TEST4(arg) cout << i##arg##t << endl

int main()
{
	int iTest = 10;
	TEST0(iTest);
	TEST1(iTest);
	TEST2(Test);
	TEST3(iTes);
	TEST4(Tes);
	return 0;
}

输出为:
10
iTest
10
10
10

三、子窗体向父窗体传值

当父窗体,点击某个按钮,弹出一个子窗体时,此时子窗体用户操作完成后,需要给主窗体传值

一种常用的做法是通过connect信号槽

代码如下:

//主窗体在合适时间写connect语句,一般是在弹出子窗体的时候,如下:
//MainWindow.cpp
void MainWindow::onAddnewBtn_clicked()
{
    if(this->childWindow==NULL)
    {
       childWindow=new ChildWindow;
       connect(childWindow,&ChildWindow::sendData,this,&MainWindow::onReceiveData);
    }
    childWindow->show();
}

//实现槽函数,响应函数
void MainWindow::onReceiveData(QString data)
{
    qDebug()<<data;
}

//MainWindow.h   很简单,需要定义下槽函数
public slots:  //slots可写可不写
    void onReceiveData(QString data);




//ChildWindow.h
//这里是关键,需要定义一个信号函数,但只需要定义,不需要cpp中实现
signals:  //必须写上signals,否则connect函数中会报找不到信号
    void sendData(QString);  //无需写形参名,只需要类型即可


//ChildWindow.cpp
//在适当的时间点,举例如okBtn点击时,触发信号函数即可
void ChildWindow::okBtn_clicked()
{
    //将lineEdit中的值传入信号函数,这里实际上是调用了信号函数
    //由于上方的connect,最终会在onReceiveData中收到data的值
    sendData(ui->lineEdit->text()); 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值