QT5问题集锦+不同窗口之间进行参数/信号传递+调用其它窗口函数

:-1: error: No rule to make target '../Image/off.jpg', needed by 'debug/qrc_resource.cpp'.  Stop.

makefile中有这个文件,删除掉makefile

主窗口头文件

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();


private:private:
    Ui::MainWindow *ui;
    AboutDialog *P_About;//网络参数窗口声明

public:
void rx_canshu_slots(QString);
 
 
 
 
 

注意添加子窗口头文件,

 
 
 

主窗口源文件

 //处理子窗口带网络参数的信号
      void(AboutDialog::*funSignal)(QString) = &AboutDialog::tx_canshu;
     connect(P_About, funSignal,this,&MainWindow::rx_canshu_slots);
 
void MainWindow::rx_canshu_slots(QString data)//设置网络参数
{
    myTime->stop();//断开定时器
    QThread::msleep(500);//延时50ms
    QByteArray sendBuf0 = " ";
    sendBuf0 = QByteArray::fromHex (data.toLatin1().data());
    tcpSocket->write(sendBuf0);
    myTime->start();//开启定时器
}

子窗口头文件

signals:
     void tx_canshu(QString);       ////带网络参数的信号 只需声明,无需实现

子窗口源文件

在某处调用 emit tx_canshu(canshu_tx); //向主窗口传递参数

调用函数:

子窗口头文件:public:      void setNet_num(QString data);

子窗口源文件:

void AboutDialog::setNet_num(QString data)

{

 

}

主窗口头文件:AboutDialog *P_About;//网络参数窗口声明,头文件要包含

主窗口源文件: P_About->setNet_num(str);

注意处理信号的函数或槽不能放到子窗口中,因为在非模态窗口只执行一次,并不会遍寻,这样程序就会崩掉,因为信号响应到主窗口中了,解决方法是开多线程,或者把信号就放在主窗口中,但是可以调用子窗口中的函数

定义全局变量要在函数外面定义

在.h文件下定义类 
class   main_flag{ 
public: 
         static  int   x; 

在.cpp下定义 
int   main_flag::x=0;

猜你喜欢

转载自blog.csdn.net/Fei_Yang_YF/article/details/80697996