PDA

View Full Version : مبتدی: سیگنال accepted()



smemamian
یک شنبه 25 فروردین 1392, 19:34 عصر
سلام دوستان

من یک برنامه ی دفترچه تلفن از روی کتاب Foundations_of_Qt_Development نوشتم به صورت زیر :

dialog.h
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
Q_OBJECT

public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
const QString name() const;
void setName( const QString& );
const QString number() const;
void setNumber( const QString& );

private:
Ui::Dialog *ui;
};

#endif // DIALOG_H

mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QObject>
#include <QMainWindow>
#include "dialog.h"
#include <QDialog>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void addItem();
void editItem();
void deleteItem();

private:
Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}

Dialog::~Dialog()
{
delete ui;
}


const QString Dialog::name() const
{
return ui->lineEdit->text().replace("--","").trimmed();
}
void Dialog::setName( const QString&name )
{
ui->lineEdit->setText(name);
}

const QString Dialog::number() const
{
return ui->lineEdit_2->text().replace("--","").trimmed();
}
void Dialog::setNumber( const QString&number )
{
ui->lineEdit_2->setText(number);
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QObject>
#include "dialog.h"
#include <QMessageBox>
#include <QDialog>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

QObject::connect( ui->addButton, SIGNAL(clicked()), this, SLOT(addItem()) );
QObject::connect( ui->editButton, SIGNAL(clicked()), this, SLOT(editItem()) );
QObject::connect( ui->deleteButton, SIGNAL(clicked()), this, SLOT(deleteItem()) );
}

MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::addItem()
{
Dialog dll(this);

if(dll.exec() == QDialog::accepted())
{
ui->list->addItem(dll.name() + "--" + dll.number());
}
}

void MainWindow::editItem()
{
if(!ui->list->currentItem())
return ;
QStringList part = ui->list->currentItem()->text().split("--");
Dialog dlg(this);
dlg.setName(part[0].trimmed());
dlg.setNumber(part[1].trimmed());

if(dlg.exec() == QDialog::accepted())
{
ui->list->currentItem()->setText(dlg.name() + "--" + dlg.number());
}

}
void MainWindow::deleteItem()
{
if(ui->list->currentItem()->isSelected())
delete ui->list->currentItem();
else
QMessageBox::warning(this,"Select...","plz selected an item");
}


این تصویر mainwindow :

http://axgig.com/images/71193189994197850201.jpg (http://barnamenevis.org/)
این تصویر dialog :

http://axgig.com/images/22306888720183653884.jpg (http://http://barnamenevis.org/)

در mainwidnow.cpp خط 26 و 41 خطای زیر رو میده :


C:\Users\mainwindow.cpp:26: error: C2352: 'QDialog::accepted' : illegal call of non-static member functionتوی کتاب گفته بود در فروم dialog سیگنال و اسلات فروم dialog به شکل زیر باشه :

http://axgig.com/images/01763505724608727284.jpg (http://google.com/)

ولی من چون سیگنال accepted و rejected نداشتم به شکل زیر انجام دادم ! :


http://axgig.com/images/00665685663716073506.jpg (http://barnamenevis.org)

aidinMC
یک شنبه 25 فروردین 1392, 19:53 عصر
شما تابع فراخوانی میکنی باید یکی از اعضای مجموع DialogCode رو فراخوانی کنی یعن باید کدتو به شکل زیر تغییر بدی



if(dlg.exec() == QDialog::Accepted)

smemamian
یک شنبه 25 فروردین 1392, 20:08 عصر
ممنونم.

برنامه به خوبی اجرا شد.. ولی توی کتاب اینجوری نوشته بود : Qt::Accepted ! ولی اصلا همچین چیزی نداریم.. فکر کنم در ویرایش جدید تغییر کرده ...

smemamian
یک شنبه 25 فروردین 1392, 21:12 عصر
یه سوال دیگه :

چرا در قسمت public یا private کلاس mainwindow کد زیر رو قرار میدم خط قرمز میاد زیرش :

Dialogld(this);