próbuję stworzyć prosty przycisk, ale wysiadam już na samym początku, kiedy mam wykorzystać funkcję connect. Mam coś takiego:
#include
#include
#include
class button :public QPushButton
{
Q_OBJECT
public:
button()
{
QPushButton("sdfa");
}
public slots:
void fu(){
QMessageBox::information(0,"sdf","sadfasfasdfsdaf",QMessageBox::Ok);
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
//QMessageBox::information(0,"sdf","sadfasfasdfsdaf",QMessageBox::Ok);
QWidget window;
QHBoxLayout layout;
window.resize(320, 240);
window.show();
window.setWindowTitle(QApplication::translate("toplevel", "Top-level widget"));
// QPushButton *bu=new QPushButton("safd");
button *b=new button();
QLineEdit *edit=new QLineEdit();
layout.addWidget(b);
layout.addWidget(edit);
window.setLayout(&layout);
return app.exec();
}
Jeśli nie napiszę na górze tego Q_OBJECT to niby się kompiluje, ale na moim przycisku nie wyświetla się żaden tekst. Jeżeli to zostawię, to się nie kompiluje, bo wywala error “undefined reference to vtable for button”. No i już w ogóle nie wiem gdzie mam wstawiać tego connecta i jakie mam mu argumenty podawać, żeby funkcja fu wreszcie mi się odpalała po kliknięciu. – Dodane 27.07.2010 (Wt) 18:48 – albo, czy nie dałoby się tego prościej jakoś zrobić, jak np.
#include
#include
#include
#include
void f(){
QMessageBox::information(0,"sdfa","sfsadf",QMessageBox::Ok);
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
//QMessageBox::information(0,"sdf","sadfasfasdfsdaf",QMessageBox::Ok);
QWidget window;
QHBoxLayout layout;
window.resize(320, 240);
QPushButton *b=new QPushButton("asdf",&window);
QObject::connect(b, SIGNAL(clicked),&app, SLOT(f()));
window.show();
window.setWindowTitle(QApplication::translate("toplevel", "Top-level widget"));
return app.exec();
}
tylko tak, żeby to jednak działało…