Я записываю в заголовочный файл приватные слоты и компилятор выдает ошибку:
d:\qtproject\new123\mainwindow.h:31: error: C2059: syntax error : 'public'
Пожалуйста, помогите мне. Я изменил на public, но без разницы. Когда я очищаю ‘public / private slots’, ошибка не появляется, но пишет
загрузка D: \ Qtproject \ new123 \ debug \ new123.exe …
QObject :: connect: такого слота нет. QPushButton :: changes () в main.cpp: 18
QObject :: connect: такого слота нет. QPushButton :: Move () в main.cpp: 27
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void changed();
void moved();
signals:
void clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void moved()
{
QPushButton a;
a.move(100,100);
}
void changed()
{ QPushButton g;
g.setStyleSheet("QPushButton { background-color : white; color :blue; }");
}
main.cpp
#include "mainwindow.h"#include <QApplication>
#include <QLabel>
#include <QPushButton>int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
QPushButton s("Change Color", &w);
s.setStyleSheet("QPushButton { background-color : white; color :pink; }""QPushButton:pressed { color: blue; }");
QObject::connect(&s, SIGNAL(clicked()), &s, SLOT(changed()));
QPushButton d("Quit", &w);
d.setStyleSheet("QPushButton { background-color : white; color :black; }");
QObject::connect(&d, SIGNAL(clicked()), qApp, SLOT(quit()));
d.move(100,0);
QPushButton f("Move Button", &w);
f.move(200,0);
f.setStyleSheet("QPushButton { background-color : white; color :green; }");
QObject::connect(&f, SIGNAL(clicked()), &f, SLOT(moved()));
w.show();
return a.exec();
}
Вы должны изучить C ++, прежде чем изучать Qt.
Вы заявляете moved()
а также changed()
как методы MainWindow
, но затем определите их как свободные функции в исходном файле. Затем вы пытаетесь подключить QPushButton::clicked()
в эти слоты, но скажите connect(..)
метод, что слоты принадлежат QPushButton
вместо MainWindow
,
В вашем moved()
а также changed()
функции, которые вы создаете QPushButton
в каждом, но не давайте им родителей и не добавляйте их в макет (чтобы они не были видны). Вы также создаете их в стеке, поэтому они уничтожаются по завершении функций.