2015-05-08 3 views
-5

Я пишу в заголовочном файле частных слотов и компилятор выдает ошибку:ошибка из кварты неразрешенной C2019

d:\qtproject\new123\mainwindow.h:31: error: C2059: syntax error : 'public'

Пожалуйста, помогите мне. Я изменился на публичный, но без разницы. Когда я очищаю «общедоступные/частные слоты», ошибки не возникает, но пишет Загрузка D: \ Qtproject \ new123 \ debug \ new123.exe ... QObject :: connect: нет такого слота QPushButton :: изменены() в main.cpp: 18 QObject :: подключить: Нет такого слота QPushButton :: перемещаемого() в 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(); 

} 
+0

, пожалуйста, помогите, я начал изучать QT и нуждаюсь в вашей помощи – kawake123

+1

Соответствующий код пожалуйста. – AndyG

+0

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include пространства имен {Ui класс MainWindow; } класс MainWindow: общественный QMainWindow { Q_OBJECT общественности: явное MainWindow (QWidget * Родитель = 0); ~ MainWindow(); приватные слоты: void changed(); void moving(); сигналы: void clicked(); частный: Ui :: MainWindow * ui; }; #endif // MAINWINDOW_H – kawake123

ответ

1

вы должны научиться C++, прежде чем изучать Qt.

Вы объявляете moved() и changed() как методы MainWindow, но затем определяете их как свободные функции в исходном файле. Затем вы пытаетесь подключить QPushButton::clicked() к этим слотам, но скажите connect(..), что слоты принадлежат QPushButton вместо MainWindow.

В ваших moved() и changed() функциях вы создаете QPushButton в каждом, но не давайте им родителя или добавляйте их в макет (чтобы они не были видны). Вы также создаете их в стеке, поэтому они уничтожаются по мере завершения функций.

+0

да я все узнаю и каждый раз)) спасибо, но я в замешательстве, я хочу создать кнопку, щелкнуть по ней и изменить цвет текста, а также создать другую кнопку, нажать на нее и переместить ее. Можете ли вы дать мне пример, как это сделать, или код? – kawake123

+0

@ kawake123 Нет. SO не является консультантом по программному обеспечению, на веб-сайте Qt имеется огромное количество обучающих программ и примеров (http://doc.qt.io/qt-5/qtexamplesandtutorials.html). Вы можете задать новый вопрос, если у вас есть проблема с _спецификой. – cmannett85

+0

cmannett85 спасибо – kawake123