bin Qt-Anfänger - es kann also gut sein, dass in meiner Herangehensweise ein grundlegender Denkfehler liegt.
Es geht um ein Qt v5.4 Windows Desktop Programm, dessen Grundgerüst mit dem Project-Wizard von Qt Creator angelegt wurde. Mit einer QMainWindow Klasse mit Menü und Dialogboxen, die danach im Qt Designer erstellt wurden. Alles also ganz klassisch.
Hinzugefügt wurde eine von QWidget abgeleitete Klasse "Paint", um darin in "paintEvent()" mit QPainter zu zeichnen. Danach wurde "Paint" im Qt-Designer dem "QMainwindows::centralWidget" zugeordnet. Auch das ist vermutlich ein Standardverfahren.
Dieser Klasse "Paint" soll nun eine eigene "Config" Klasse übergeben, bzw. in ihrer "paintEvent()" Funktion verfügbar gemacht werden. Leider ist es mir nicht gelungen, "Config" in einem zusätzlichen Parameter dem "Paint" Konstruktor zu übergeben:
Code: Alles auswählen
#include "ui_mainwindow.h"
#include "MyDialog.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_actionNeu_triggered();
private:
Ui::MainWindow *ui;
};
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowTitle(tr("Title"));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionNeu_triggered()
{
MyDialog dlg;
dlg.setModal(true);
dlg.exec();
} Code: Alles auswählen
// MainWindow-ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Nut</string>
</property>
<widget class="Paint" name="centralWidget"/>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>26</height>
</rect>
</property>
<widget class="QMenu" name="menuMy">
<property name="title">
<string>My</string>
</property>
<addaction name="actionNeu"/>
</widget>
<addaction name="menuMy"/>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
<action name="actionNeu">
<property name="text">
<string>Neu</string>
</property>
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
<customwidget>
<class>Paint</class>
<extends>QWidget</extends>
<header>paint.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>
Code: Alles auswählen
#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include "MeineZeichenfunktion.h"
#include "Config.h"
class Paint : public QWidget
{
public:
Paint(QWidget * parent = 0, Config *C);
Config *Conf;
protected:
void paintEvent(QPaintEvent *);
};
Paint::Paint(QWidget * parent, Config *C)
{
Conf = C;
};
void Paint::paintEvent(QPaintEvent *)
{
QPainter painter(this);
//--- Zeichenfunktionen mit Parameter Config Klasse --
MeineZeichenfunktion Zeichenfunktion(&painter, Conf);
}; Wo liegt da der Fehler in "Paint", bzw. seiner Ableitung von "QWidget"?C2548: 'Paint::Paint': Fehlender Standardparameter für Parameter 2
C2664: 'Paint::Paint(const Paint &)' : Konvertierung von Argument 1 von 'QMainWindow *' in 'const Paint &' nicht möglich
Ursache: Konvertierung von 'QMainWindow *' in 'const Paint' nicht möglich
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig
Da "Paint" in der "MainWindows.ui" Formdatei dem "MainWindow::centralWidget" zugewiesen wird, ist mir zudem nicht klar, wo im Qt C++ Code die "Paint" Klasse initialisiert wird, um dort "Paint" meine "Config" Klasse zu übergeben?
Wie kann die Übergabe von "Config" an "Paint" realisiert, bzw. der Zugriff auf "Config" in "paintEvent()" ermöglicht werden?