Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Whats' wrong with this "connect“ ?

Whats' wrong with this "connect“ ?

Scheduled Pinned Locked Moved Solved General and Desktop
4 Posts 2 Posters 919 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G Offline
    G Offline
    Geng.Y
    wrote on last edited by
    #1

    I wanna connect several signals with several slots, but why the first "connect" works while the second one doesn't? Wish you can help me with this!
    0_1499910587784_20170713094802.png

    //minidraw.h
    
    #ifndef MINIDRAW_H
    #define MINIDRAW_H
    
    #include <QtWidgets/QMainWindow>
    #include "ui_minidraw.h"
    #include "viewwidget.h"
    #include <QMessageBox>
    
    class MiniDraw : public QMainWindow
    {
    	Q_OBJECT
    
    public:
    	MiniDraw(QWidget *parent = 0);
    	~MiniDraw();
    
    	void Init();
    	void About();
    private:
    	Ui::MiniDrawClass ui;
    
    	QMenu *pMenu1,*pMenu2;
    	QAction *pAction0,*pAction1,*pAction2,*pAction3,*pAction4,*pAction5,*pAction6;
    	QToolBar *pToolbar1,*pToolbar2,*pToolbar3,*pToolbar4,*pToolbar5,*pToolbar6;
    
    	ViewWidget *view_widget_;
    	
    };
    
    #endif // MINIDRAW_H
    
    
    //minidraw.cpp
    
    #include "minidraw.h"
    
    
    MiniDraw::MiniDraw(QWidget *parent)
    	: QMainWindow(parent)
    {
    	ui.setupUi(this);
    
    	Init();
    
    }
    
    MiniDraw::~MiniDraw()
    {
    
    }
    
    void MiniDraw::Init()
    {
    	pMenu1 = menuBar()->addMenu(tr("&Menu"));
    	pMenu2 = menuBar()->addMenu((tr("&About")));
    
    	pAction0 = new QAction(tr("&About"),this);
    	pAction1 = new QAction(tr("&Line"),this);
    	pAction2 = new QAction(tr("&Rectangle"),this);
    	pAction3 = new QAction(tr("Ellipse"),this);
    	
    	pToolbar1 = addToolBar(tr("&Line"));
    	pToolbar2 = addToolBar(tr("&Rectangle"));
    	pToolbar3 = addToolBar(tr("&Ellipse"));
    
    	pToolbar1->addAction(pAction1);
    	pToolbar2->addAction(pAction2);
    	pToolbar3->addAction(pAction3);
    
    	pMenu1->addAction(pAction1);
    	pMenu1->addAction(pAction2);
    	pMenu1->addAction(pAction3);
    	pMenu2->addAction(pAction0);
    	
    	connect(pAction0,&QAction::triggered,this,&MiniDraw::About);
    	connect(pAction1,&QAction::triggered,this,&ViewWidget::setType_Line); // **It dosen't work!!!**
    	view_widget_ = new ViewWidget();
    	setCentralWidget(view_widget_);
    }
    
    void MiniDraw::About()
    {
    	QMessageBox::about(this,tr("About"),tr("Demo of MiniDraw\n  by Geng.Y"));
    }
    
    //viewwidget.h
    
    #ifndef VIEWWIDGET_H
    #define VIEWWIDGET_H
    
    #include <QWidget>
    #include <QMouseEvent>
    #include <QPainter>
    #include <vector>
    #include "ui_viewwidget.h"
    #include "Figure.h"
    
    using namespace std;
    
    enum FigureType
    {
    	kDefault = 0,
    	kLine = 1,
    	kEllipse = 2,
    };
    
    class ViewWidget : public QWidget
    {
    	Q_OBJECT
    
    public:
    	ViewWidget(QWidget *parent = 0);
    	~ViewWidget();
    
    	void mousePressEvent(QMouseEvent *event);
    	void mouseMoveEvent(QMouseEvent * event);
    	void mouseReleaseEvent(QMouseEvent* event);
    	void paintEvent(QPaintEvent *);
    
    	void setType_Line();
    	void setType_Ellipse();
    
    private:
    	Ui::ViewWidget ui;
    
    	bool draw_status;
    	QPoint mStartpoint;
    	QPoint mEndPoint;
    
    	vector<Figure*> figure_array;
    	FigureType figure_type;
    	
    };
    
    #endif // VIEWWIDGET_H
    
    
    //viewwidget.cpp
    
    #include "viewwidget.h"
    
    ViewWidget::ViewWidget(QWidget *parent)
    	: QWidget(parent)
    {
    	ui.setupUi(this);
    
    	draw_status = false;
    }
    
    ViewWidget::~ViewWidget()
    {
    	for (int i=0;i<figure_array.size();i++)
    	{
    		if (figure_array[i])
    		{
    			delete figure_array[i];
    			figure_array[i] = NULL;
    		}
    	}
    }
    
    void ViewWidget::mousePressEvent(QMouseEvent *event)
    {
    	if (Qt::LeftButton==event->button())
    	{
    		draw_status = true;
    
    		mStartpoint = mEndPoint = event->pos();
    	}
    }
    
    void ViewWidget::mouseMoveEvent(QMouseEvent * event)
    {
    	if (draw_status)
    	{
    		mEndPoint = event->pos();
    	}
    }
    
    void ViewWidget::mouseReleaseEvent(QMouseEvent *evnet)
    {
    	draw_status = false;
    }
    
    void ViewWidget::paintEvent(QPaintEvent *)
    {
    	QPainter painter(this);
    	painter.begin(this);
    	//painter.drawLine(mStartpoint,mEndPoint);
    	//painter.drawEllipse(mStartpoint.rx(),mStartpoint.ry(),mEndPoint.rx()-mStartpoint.ry(),mEndPoint.ry()-mStartpoint.ry());
    	painter.end();
    
    	update();
    }
    
    void ViewWidget::setType_Line()
    {
    	figure_type = kLine;
    }
    
    void ViewWidget::setType_Ellipse()
    {
    	figure_type = kEllipse;
    }
    
    1 Reply Last reply
    0
    • Vinod KuntojiV Offline
      Vinod KuntojiV Offline
      Vinod Kuntoji
      wrote on last edited by Vinod Kuntoji
      #2
      @Geng-Y ,
      

      You should create the ViewWidget object before the connect statement,

      view_widget_ = new ViewWidget();
      connect(pAction0,&QAction::triggered,this,&MiniDraw::About);
      connect(pAction1,&QAction::triggered,view_widget_,&ViewWidget::setType_Line);

      C++, Qt, Qt Quick Developer,
      PthinkS, Bangalore

      1 Reply Last reply
      4
      • G Offline
        G Offline
        Geng.Y
        wrote on last edited by
        #3

        Thank you very much!

        Vinod KuntojiV 1 Reply Last reply
        1
        • G Geng.Y

          Thank you very much!

          Vinod KuntojiV Offline
          Vinod KuntojiV Offline
          Vinod Kuntoji
          wrote on last edited by
          #4

          @Geng.Y

          Hi,

          Please mark your issue as solved.

          C++, Qt, Qt Quick Developer,
          PthinkS, Bangalore

          1 Reply Last reply
          0

          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved