View previous topic :: View next topic |
Author |
Message |
Fulgurance Veteran
Joined: 15 Feb 2017 Posts: 1198
|
Posted: Tue May 29, 2018 6:38 am Post subject: [Solved]No matching function for call to TerritoryShowBox |
|
|
Hello, today, i have problem with my program and i don't found my error... It's Qt program.
Log:
Code: | ../ZTM/TerritorySummaryBox.cpp: In constructor ‘TerritorySummaryBox::TerritorySummaryBox(QWidget*)’:
../ZTM/TerritorySummaryBox.cpp:9:75: error: no matching function for call to ‘TerritoryShowBox::TerritoryShowBox()’
TerritorySummaryBox::TerritorySummaryBox(QWidget *parent) : QDialog(parent)
^
In file included from ../ZTM/TerritorySummaryBox.h:10:0,
from ../ZTM/TerritorySummaryBox.cpp:1:
../ZTM/TerritoryShowBox.h:14:5: note: candidate: TerritoryShowBox::TerritoryShowBox(QWidget*)
TerritoryShowBox(QWidget *parent);
^~~~~~~~~~~~~~~~
../ZTM/TerritoryShowBox.h:14:5: note: candidate expects 1 argument, 0 provided
make: *** [Makefile:849: TerritorySummaryBox.o] Error 1
make: *** Waiting for unfinished jobs....
08:27:18: Le processus "/usr/bin/make" s'est terminé avec le code 2.
Erreur lors de la compilation/déploiement du projet ZTM (kit : Desktop)
When executing step "Make" |
TerritoryShowBox header
Code: | #ifndef TERRITORYSHOWBOX_H
#define TERRITORYSHOWBOX_H
#include <QDialog>
#include <QTabWidget>
#include <QGridLayout>
#include <QPushButton>
#include <QGroupBox>
class TerritoryShowBox : public QDialog
{
Q_OBJECT
public:
TerritoryShowBox(QWidget *parent);
void set_territory_id(int id);
private:
QTabWidget tabs;
QPushButton first_print_button;
QPushButton second_print_button;
QPushButton end_button;
QWidget first_picture_tab;
QWidget second_picture_tab;
QGridLayout first_picture_layout;
QGridLayout second_picture_layout;
QGroupBox first_picture_box;
QGroupBox second_picture_box;
QGridLayout first_picture_tab_layout;
QGridLayout second_picture_tab_layout;
QGridLayout layout;
void initialize();
void create_first_print_button();
void create_second_print_button();
void create_end_button();
void create_buttons();
void create_first_picture_layout();
void create_second_picture_layout();
void create_first_picture_tab_layout();
void create_second_picture_tab_layout();
void create_layout();
void create_layouts();
void create_first_picture_box();
void create_second_picture_box();
void create_group_boxs();
void create_tabs();
void connect_buttons();
};
#endif
|
TerritoryShowBox.cpp
Code: | #include "TerritoryShowBox.h"
TerritoryShowBox::TerritoryShowBox(QWidget *parent) : QDialog(parent)
{
initialize();
create_buttons();
create_layouts();
create_group_boxs();
create_tabs();
connect_buttons();
}
void TerritoryShowBox::initialize()
{
setWindowTitle("Aperçu");
setWindowFlags(Qt::Dialog | Qt::WindowTitleHint | Qt::WindowCloseButtonHint);
setLayout(&layout);
}
void TerritoryShowBox::create_first_print_button()
{
first_print_button.setText("Imprimer");
first_print_button.setToolTip("Imprimer la face recto du territoire");
}
void TerritoryShowBox::create_second_print_button()
{
second_print_button.setText("Imprimer");
second_print_button.setToolTip("Imprimer la face verso du territoire");
}
void TerritoryShowBox::create_end_button()
{
end_button.setText("Fermer");
end_button.setToolTip("Fermer l'aperçu du territoire");
}
void TerritoryShowBox::create_buttons()
{
create_first_print_button();
create_second_print_button();
create_end_button();
}
void TerritoryShowBox::create_first_picture_layout()
{
//first_picture_layout.addWidget(&first_picture_box,0,0,1,2);
}
void TerritoryShowBox::create_second_picture_layout()
{
//second_picture_layout.addWidget(&second_picture_box,0,0,1,2);
}
void TerritoryShowBox::create_first_picture_tab_layout()
{
//first_picture_tab_layout.addWidget(&first_picture_box);
}
void TerritoryShowBox::create_second_picture_tab_layout()
{
//second_picture_tab_layout.addWidget(&second_picture_box);
}
void TerritoryShowBox::create_layout()
{
layout.addWidget(&tabs,0,0,1,4);
layout.addWidget(&end_button,1,3,1,1);
}
void TerritoryShowBox::create_layouts()
{
create_first_picture_layout();
create_second_picture_layout();
create_first_picture_tab_layout();
create_second_picture_tab_layout();
create_layout();
}
void TerritoryShowBox::create_first_picture_box()
{
first_picture_box.setTitle("Aperçu du territoire face recto");
first_picture_box.setLayout(&first_picture_layout);
}
void TerritoryShowBox::create_second_picture_box()
{
second_picture_box.setTitle("Aperçu du territoire face verso");
second_picture_box.setLayout(&second_picture_layout);
}
void TerritoryShowBox::create_group_boxs()
{
create_first_picture_box();
create_second_picture_box();
}
void TerritoryShowBox::create_tabs()
{
first_picture_tab.setLayout(&first_picture_tab_layout);
second_picture_tab.setLayout(&second_picture_tab_layout);
tabs.addTab(&first_picture_tab,"Recto");
tabs.addTab(&second_picture_tab,"Verso");
}
void TerritoryShowBox::connect_buttons()
{
connect(&end_button,SIGNAL(clicked()),this,SLOT(close()));
}
void TerritoryShowBox::set_territory_id(int id)
{
}
|
TerritorySummaryBox header
Code: | #ifndef TERRITORYSUMMARYBOX_H
#define TERRITORYSUMMARYBOX_H
#include <QDialog>
#include <QGroupBox>
#include <QTextEdit>
#include <QPushButton>
#include <QHBoxLayout>
#include <QGridLayout>
#include "TerritoryShowBox.h"
class TerritorySummaryBox : public QDialog
{
Q_OBJECT
public:
TerritorySummaryBox(QWidget *parent);
void set_territory_id(int id);
public slots:
void open_territory_show_box();
private:
QGroupBox box;
QTextEdit summary_text;
QPushButton show_button;
QPushButton close_button;
QHBoxLayout box_layout;
QGridLayout layout;
TerritoryShowBox territory_show_box;
void initialize();
void initialize_pointers();
void create_group_box();
void create_summary_text();
void create_show_button();
void create_close_button();
void create_buttons();
void create_box_layout();
void create_layout();
void create_layouts();
void connect_buttons();
};
#endif // TERRITORYSUMMARYBOX_H
|
TerritorySummaryBox.cpp
Code: | #include "TerritorySummaryBox.h"
#include "Territory.h"
#include "LogEvent.h"
#include "ZTM.h"
using ZTM::load_territory_data;
using ZTM::date_string;
TerritorySummaryBox::TerritorySummaryBox(QWidget *parent) : QDialog(parent)
{
initialize();
initialize_pointers();
create_group_box();
create_summary_text();
create_buttons();
create_layouts();
connect_buttons();
}
void TerritorySummaryBox::initialize()
{
setWindowTitle("Détail");
setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint);
setLayout(&layout);
}
void TerritorySummaryBox::initialize_pointers()
{
//territory_show_box = new TerritoryShowBox(this);
}
void TerritorySummaryBox::create_group_box()
{
box.setLayout(&box_layout);
}
void TerritorySummaryBox::create_summary_text()
{
summary_text.setReadOnly(true);
}
void TerritorySummaryBox::create_show_button()
{
show_button.setText("Aperçu");
show_button.setToolTip("Afficher l'aperçu du territoire");
}
void TerritorySummaryBox::create_close_button()
{
close_button.setText("Fermer");
close_button.setToolTip("Fermer les détails de ce territoire");
}
void TerritorySummaryBox::create_buttons()
{
create_show_button();
create_close_button();
}
void TerritorySummaryBox::create_box_layout()
{
box_layout.addWidget(&summary_text);
}
void TerritorySummaryBox::create_layout()
{
layout.addWidget(&box,0,0,1,5);
layout.addWidget(&show_button,4,0,1,2);
layout.addWidget(&close_button,4,4,1,1);
}
void TerritorySummaryBox::create_layouts()
{
create_box_layout();
create_layout();
}
void TerritorySummaryBox::set_territory_id(int id)
{
summary_text.clear();
box.setTitle("Territoire n°"+QString::number(id));
Territory data = load_territory_data(id);
QString summary;
QString available;
QString last_out;
QString last_change_assignment;
QString last_enter;
if (data.last_out_date().isNull())
{
last_out = "Aucune";
}
else
{
last_out = "Le "+date_string(data.last_out_date().date())+" à "+data.last_out_date().time().toString();
}
if (data.last_change_assignment_date().isNull())
{
last_change_assignment = "Aucun";
}
else
{
last_change_assignment = "Le "+date_string(data.last_change_assignment_date().date())+" à "+data.last_change_assignment_date().time().toString();
}
if (data.last_enter_date().isNull())
{
last_enter = "Aucune";
}
else
{
last_enter = "Le "+date_string(data.last_enter_date().date())+" à "+data.last_enter_date().time().toString();
}
if (data.available())
{
available = "<font color=\"#00dd00\"><b>Oui</b></font>";
}
else
{
available = "<font color=\"#ff0000\"><b>Non</b></font>";
}
summary.append("<font color=\"#009fff\"><u><i><b>Informations</b></i></u></font><br>");
summary.append("<b>-Lieu: <font color=\"#0000ff\">"+data.name()+"</font></b><br>");
summary.append("<b>-Dernière sortie:</b> "+last_out+"<br>");
summary.append("<b>-Dernier réassignement:</b> "+last_change_assignment+"<br>");
summary.append("<b>-Dernière rentrée:</b> "+last_enter+"<br>");
summary.append("<b>-Disponible:</b> "+available+"<br><br>");
if (!data.events().isEmpty())
{
summary.append("<font color=\"#df0080\"><u><i><b>Historique</b></i></u></font><br>");
foreach(TerritoryEvent event, data.events())
{
summary.append(event.list_name());
}
}
summary_text.setHtml(summary);
}
void TerritorySummaryBox::connect_buttons()
{
QObject::connect(&close_button,SIGNAL(clicked()),this,SLOT(accept()));
QObject::connect(&show_button,SIGNAL(clicked()),this,SLOT(open_territory_show_box()));
}
void TerritorySummaryBox::open_territory_show_box()
{
//territory_show_box->set_territory_id(id.toInt());
//territory_show_box->exec();
}
|
Last edited by Fulgurance on Tue May 29, 2018 11:40 am; edited 1 time in total |
|
Back to top |
|
|
Genone Retired Dev
Joined: 14 Mar 2003 Posts: 9522 Location: beyond the rim
|
Posted: Tue May 29, 2018 7:47 am Post subject: |
|
|
The problem is that your TerritorySummaryBox has a TerritoryShowBox member that isn't explicitly initialized in the constructor, so the compiler is calling the default constructor. But as you defined a constructor with a mandatory parameter there is no default constructor defined for TerritoryShowBox.
Two possible quick fixes:
1) change the declaration in territoryshowbox.h from
Code: | TerritoryShowBox(QWidget *parent); |
to
Code: | TerritoryShowBox(QWidget *parent = 0); |
2) explicitly initialize the member in the TerritorySummaryBox constructor by changing
Code: | TerritorySummaryBox::TerritorySummaryBox(QWidget *parent) : QDialog(parent) |
to
Code: | TerritorySummaryBox::TerritorySummaryBox(QWidget *parent) : QDialog(parent), territory_show_box(0) |
Or you actually change it into a pointer which the commented code in the relevant member functions already expect. |
|
Back to top |
|
|
Fulgurance Veteran
Joined: 15 Feb 2017 Posts: 1198
|
Posted: Tue May 29, 2018 10:35 am Post subject: |
|
|
Solved ! I have just ommited * for pointer on header.... stupid error |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|