[Solved]Why my defined QAction has no response?
-
Hello, everyone.
I am a beginner of Qt programming.
I just make a simple exercise following example "widgets-imageviewer":http://doc.qt.digia.com/latest/widgets-imageviewer.html
In my program , I made a QAction "rgbFilterAct" under QMenu "processingMenu" , and connected it with function filterRGB(void) to display a RGB range choosing dialogue.
But it has no response after I click the menu item rgbFilterAct.
Can anyone kindly tell me why.
The following is my code.
@
// main.cpp//
#include <QApplication>
#include "mainwindow.h"
#include "rgbdlg.h"
int main(int argc,char **argv)
{QApplication app(argc, argv);
MainWindow *mwin =new MainWindow();
mwin->show();
return app.exec();
}@
@
//MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QtGui>
#include "rgbdlg.h"class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
QAction *openAct;
QAction *quitAct;QAction *rgbFilterAct; QMenuBar *menubar; QMenu *fileMenu; QMenu *processingMenu; QLabel *imgLabel; QScrollArea *scrollArea; QImage imgsrc,imgdst; double scaleFactor; RGBDlg *rgbDlg;
signals:
public slots:
void open();
void save();
void quit();
void filterRGB();};
#endif // MAINWINDOW_H
@
@
//MainWindow.cpp
#include "mainwindow.h"
#include "rgbdlg.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
this->setWindowTitle(tr("Filter image By Color "));openAct = new QAction(tr("&Open..."),this); quitAct = new QAction(tr("&Quit"),this); rgbFilterAct = new QAction(tr("&Filter RGB"),this); this->connect(openAct, SIGNAL(triggered()), this, SLOT(open())); this->connect(quitAct, SIGNAL(triggered()), this, SLOT(quit())); this->connect(rgbFilterAct,SIGNAL(triggereed()),this,SLOT(filterRGB())); fileMenu = new QMenu(tr("&File"),this); fileMenu->addAction(openAct); fileMenu->addAction(quitAct); processingMenu= new QMenu(tr("&Processing"),this); processingMenu->addAction(rgbFilterAct); menubar=new QMenuBar; menubar->addMenu(fileMenu); menubar->addMenu(processingMenu); imgLabel = new QLabel; imgLabel->setBackgroundRole(QPalette::Base); imgLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); imgLabel->setScaledContents(true); scrollArea = new QScrollArea; scrollArea->setBackgroundRole(QPalette::Dark); scrollArea->setWidget(imgLabel); this->setMenuBar(menubar); this->setCentralWidget(scrollArea); scaleFactor=1.0; rgbDlg=NULL; this->resize(800,600); this->show();
}
void MainWindow::open(void)
{
QString fileName = QFileDialog::getOpenFileName(this,
tr("Open File"), QDir::currentPath());
if (!fileName.isEmpty()) {
QImage imgsrc(fileName);
if (imgsrc.isNull()) {
QMessageBox::information(this, tr("FilterImageByColor"),
tr("Cannot load %1.").arg(fileName));
return;
}
imgdst=imgsrc;
imgLabel->setPixmap(QPixmap::fromImage(imgdst));
scaleFactor=1.0;
imgLabel->resize(imgLabel->pixmap()->size());
return ;
}
return ;
}void MainWindow::save(void)
{
return ;
}void MainWindow::quit(void)
{
if(QMessageBox::Yes==QMessageBox::question(this,tr("FileterImageByColor"),
tr("Do you want to really quit program?"),
QMessageBox::Yes | QMessageBox::No,QMessageBox::No))
{
QApplication::quit();
}
return;
}void MainWindow::filterRGB(void)
{
if(!rgbDlg) {
rgbDlg = new RGBDlg(this);
}
rgbDlg->exec();
return ;
}
@@
//rgbdlg.h
#ifndef RGBDLG_H
#define RGBDLG_H#include <QDialog>
#include <QtGUI>
class RGBDlg : public QDialog
{
Q_OBJECT
public:
RGBDlg(QWidget *parent = 0);signals:
public slots:
};
#endif // RGBDLG_H
@
@
//rgbdlg.cpp
#include "rgbdlg.h"RGBDlg::RGBDlg(QWidget *parent) :
QDialog(parent)
{
}@
-
Hi ,
Welcome to DEVNET,
If you check line 16 of mainwindow.cpp I think there is a mistake with
@this->connect(rgbFilterAct,SIGNAL(triggereed()),this,SLOT(filterRGB()));@
triggered() should be used ,spelling mistake/ you dont have any SIGNAL : triggereed() declaration for RGBDlg.
-
[quote author="gayu" date="1353394688"]Think so u r using Qt4. Whether the code runs fine without showing any errors?
I checked the code whether it is running or not.
But,the code works fine for me.[/quote]The Project compiles n Runs successfully but for him the QAction is not working . Did you check with the requirements as I see if you click on Processing->Filter RGB it does not open RGBDlg, as there is a spelling mistake for the SIGNAL that he/she is trying to connect.
-
Ya sure
The following is the main.cpp file@
#include <qapplication.h>
#include "mainform.h"int main( int argc, char ** argv )
{
QApplication a( argc, argv );
mainForm w;
w.show();
a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
return a.exec();
}
@
The following code is somewhere in the mainform.cpp file@
void mainForm::setupLanguageActions()
{Q3ToolBar *tb = new Q3ToolBar( this ); tb->setLabel( "Language Actions" ); Q3PopupMenu *menu = new Q3PopupMenu( this ); menuBar()->insertItem( tr( "&Language" ), menu ); Q3Action *a; a = new Q3Action( tr( "Tamil" ), tr( "&Tamil" ), Qt::CTRL + Qt::Key_Z, this, "langtamil" ); connect( a, SIGNAL( activated() ), this, SLOT( ChangeLangTamil() ) ); a->addTo( tb ); a->addTo( menu ); a = new Q3Action( tr( "Hindi" ), tr( "&Hindi" ), Qt::CTRL + Qt::Key_Y, this, "langhindi" ); connect( a, SIGNAL( activated() ), this, SLOT( ChangeLangHindi() ) ); a->addTo( tb ); a->addTo( menu );
}
@
And also for more actions.. -
[quote author="gayu" date="1353403125"]Might what the question i'm asking is silly, but please tell me
Whether Qt4 support QAction[/quote]Ofcourse Qt4 support QAction ,you can have a look in "Porting to Qt 4":http://qt-project.org/doc/qt-4.8/porting4.html#qaction and "QAction":http://qt-project.org/doc/qt-4.8/qaction.html class.
But why are you still working in Qt 3 ?