• 5531阅读
  • 11回复

请帮忙给看下到底哪里出问题了,谢谢了,我很着急,我实在是不知道哪里出错了 [复制链接]

上一主题 下一主题
离线sdyansong
 

只看楼主 倒序阅读 楼主  发表于: 2013-08-09
mainwindo。h


#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

//#include "ui_mainwindow.h"
#include <QDialog>
#include <QWidget>
#include <QTranslator>

#include "draw.h"

#include "menu.h"

#include <iostream>
using namespace std;
class QPushButton;
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
   // void butTon(QWidget *);
    void paintEvent(QPaintEvent *);

protected:

    Menu* w;

protected slots:

    // 父窗口用于接收子窗口信号的slot。
    void Button_clicked()
    {
        cout << "hello mainwindows" <<endl;
        //子窗口的按钮被点击了。
    }
};

#endif // MAINWINDOW_H//项目横向横坐标



mainwindow。cpp



#include "mainwindow.h"
//#include "ui_mainwindow.h"
#include <QPainter>
#include <iostream>

#include <QMessageBox>

#include <QApplication>
#include <QPixmap>
#include "picture.h"
#include <QtGui>

int LanNub = 78;


using namespace std;
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent)
{
    setFixedSize(800,480);
    w = new Menu();
    connect(w,SIGNAL(ChildWindowEvent()),this,SLOT(Button_clicked()));
}

MainWindow::~MainWindow()
{
}
void MainWindow::paintEvent(QPaintEvent *)
{
        // 画一条直线
        QPainter painter(this); // 创建QPainter一个对象
        QPen pen;
        //画横长线
        painter.drawLine(30,30,590,30);

        //画竖长线
        painter.drawLine(590,30,590,550);
        //画竖短线-横向
}


menu。h

#ifndef MENU_H
#define MENU_H

#include <QMainWindow>

class QPushButton;

class Menu : public QMainWindow
{
    Q_OBJECT
public:
    Menu(QWidget *parent = 0);

   void butTon(QWidget *);

signals:
   void ChildWindowEvent();


private:
    QPushButton *btn;

public slots:
    void btn_clicked();
};

#endif // MENU_H



menu。cpp

#include "menu.h"

#include <iostream>

//#include <QMessageBox>

#include <QApplication>
//#include <QPixmap>
#include "picture.h"
#include <QtGui>

class QPushbutton;

using namespace std;

Menu::Menu(QWidget *parent) :QMainWindow(parent)
{
    butTon(0);
    setFixedSize(300,200);
   // connect(pushButton,SIGNAL(clicked()),this,SLOT(on_pushButton_clicked()))
}


void Menu::butTon(QWidget *)
{
    cout << "hel" << endl;

    //QWidget *w = new QWidget(this);
    btn = new QPushButton("change picture",this);
   //btn->setGeometry(QRect(QPoint(630, 30),QSize(100, 30)));
   btn->setGeometry(QRect(QPoint(100, 50),QSize(130, 30)));
   /* QVBoxLayout *layout = new QVBoxLayout;// 这行有layout管理button大小
    layout->addWidget(btn);
    w->setLayout(layout);
    setCentralWidget(w);
    w->show();*/

    //setLayout(layout);
    connect(btn,SIGNAL(clicked()),this,SLOT(btn_clicked()));
}


void Menu::btn_clicked()
{
    cout << "hello butt" << endl;
    // 触发子窗口的信号给父窗口接收。
            emit ChildWindowEvent();
}

我想在menu。cpp里面单击按钮,发送信号ChildWindowEvent给mainwindow窗口然后调用函数打印一句话,但是mainwindow窗口不响应,请问问题出在哪啊



离线dbzhang800

只看该作者 1楼 发表于: 2013-08-09
关键地方的代码你也没给嘛,难道你是在main函数内创建了 Menu 并显示的?
离线sdyansong

只看该作者 2楼 发表于: 2013-08-09
回 1楼(dbzhang800) 的帖子
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MainWindow w;
    w.show();

    Menu m;
    m.show();

    //return m.exec();

    return a.exec();
}
离线sdyansong

只看该作者 3楼 发表于: 2013-08-09
回 1楼(dbzhang800) 的帖子
是的啊,我在main函数里创建了俩个窗口
离线sdyansong

只看该作者 4楼 发表于: 2013-08-09
回 1楼(dbzhang800) 的帖子
版主,你快回来~
离线netlove

只看该作者 5楼 发表于: 2013-08-09
这么多代码,不仔细看了,看main中你俩窗口是孤立的,没连接信号槽
离线sdyansong

只看该作者 6楼 发表于: 2013-08-09
回 5楼(netlove) 的帖子
那个怎么让它俩有链接槽啊
离线sdyansong

只看该作者 7楼 发表于: 2013-08-09
回 5楼(netlove) 的帖子
大神请给说明一下啊,程序很简单,就是创建俩窗口,单击一个窗口另一个窗口做响应,然后打印一句话,就这么简单
离线netlove

只看该作者 8楼 发表于: 2013-08-09
大体看了你的代码,创建了俩mainwindow,还在另一个里创建了其中一个,这个估计没显示,因为是mainwindow,你在这个里创建的这不连接了信号槽么,你在main函数里照样连接不就行了
离线sdyansong

只看该作者 9楼 发表于: 2013-08-09
回 8楼(netlove) 的帖子
你的意思是在main函数里面加上connect函数?你能跟我说下具体怎么改吗?我新手,不太会
离线netlove

只看该作者 10楼 发表于: 2013-08-09
QObject::connect();
离线sdyansong

只看该作者 11楼 发表于: 2013-08-09
回 10楼(netlove) 的帖子
en ,我在自己想想怎么写吧,先谢谢你啊
快速回复
限100 字节
 
上一个 下一个