In Qt moet je alles netjes opdelen in header .h en source .cpp files als je wil dat alles netjes werkt, dat komt o.a. doordat Qt nog een meta-object-compiler (moc) heeft die aan preprocessing doet..
Voorbeeld:
test.h
#include <QWidget>
// forward decl
class QHBoxLayout;
class QVBoxLayout;
class QLabel;
class QPushButton;
class QTableWidget;
class QStringList;
class scherm : public QWidget
{
Q_OBJECT
public:
scherm();
protected:
QHBoxLayout *ind;
QVBoxLayout *menu;
QLabel *saveloc;
QPushButton *selectbut;
QTableWidget *tabel;
QStringList *kolommen;
public slots:
void savelocsetgedaan();
};
test.cpp
#include <QFileDialog>
#include <QApplication>
#include <QPushButton>
#include <QLabel>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QTableWidget>
#include <QStringList>
#include "test.h"
scherm::scherm() : QWidget()
{
setFixedSize(500,600);
ind = new QHBoxLayout();
tabel = new QTableWidget(0,2);
kolommen = new QStringList;
*kolommen << "Status" << "Echte naam";
tabel->setHorizontalHeaderLabels(*kolommen);
menu = new QVBoxLayout();
saveloc = new QLabel("Opslaan in map:");
selectbut = new QPushButton("...");
menu->addWidget(saveloc);
menu->addWidget(selectbut);
QObject::connect(selectbut, SIGNAL(clicked()), this, SLOT(savelocsetgedaan()));
ind->addWidget(tabel);
ind->addLayout(menu);
setLayout(ind);
}
void scherm::savelocsetgedaan() {
saveloc->setText("Gedaan!");
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
scherm window;
window.show();
return app.exec();
}
(in principe zou main best ook in een apart bestand kunnen staan, om het geheel netter te maken, maar dat is niet verplicht)