ui was not declared in this scope w qt
Ostatnio zmodyfikowano 2015-12-17 06:08
Masterpc16 Temat założony przez niniejszego użytkownika |
ui was not declared in this scope w qt » 2015-12-15 19:59:16 Witam pierwszy projekt pisałem nie miałem tego problemu a gdy dzisiaj utworzyłem drugi, do tego projektu utworzyłem nowy Dialog(przez utwórz nowy dialog bez przycisków) w dialog.h deklaruję funkcję: public: explicit Dialog( QWidget * parent = 0 ); void zaloguj(); ~Dialog();
w pliku dialog.cpp piszę ciało funkcji. Zmiennej typu QString chcę przypisać wartość z pola LineEdit (tak ten plik dialog.cpp wygląda) #include "mainwindow.h" #include "ui_mainwindow.h" #include "dialog.h" #include <QString>
MainWindow::MainWindow( QWidget * parent ) : QMainWindow( parent ) , ui( new Ui::MainWindow ) { ui->setupUi( this ); }
MainWindow::~MainWindow() { delete ui; } void zaloguj() { QString login; login = ui->lineEdit->text(); }
i gdy to kompiluję dostaję taki błąd jak w temacie. W poprzednim projekcie tego nie miałem co może być nie tak? Przeszukałem różne fora ale nic nie mogłem znaleźć co by mi pomogło. Aha i jeszcze jedno pytanko natknąłem się gdzieś na wpis że ludzie w kursach piszą np. naciśnięcie na klawisz i akcję z nim związaną przez "connect" a nie przez "przejdź do slotu " w qt creatorze bo kurs pisali na starej wersji. To jak to jest lepiej używać "connect" czy "przejdź do slotu" ? Z góry Wielkie dzięki za odpowiedzi :) |
|
mateczek |
» 2015-12-16 12:38:09 Coś namieszałeś lub pokasowałeś. Piszesz o klasie dialog, że tam masz błąd, a prezentujesz klasę mainwindow!!!. Błąd ogólnie mówi, iż obiekt ui nie jest zadeklarowany!!! Jeśli korzystasz z designera do zaprojektowania ui. Wówczas podczas wykonywania qmake to na podstawie pliku designera jest generowany plik ui_mainwindow.h. Poniżej przykład automatycznie wygenerowanego pliku dla domyślnego szablonu aplikacji!!!
#ifndef UI_MAINWINDOW_H #define UI_MAINWINDOW_H
#include <QtCore/QVariant> #include <QtWidgets/QAction> #include <QtWidgets/QApplication> #include <QtWidgets/QButtonGroup> #include <QtWidgets/QHeaderView> #include <QtWidgets/QMainWindow> #include <QtWidgets/QMenuBar> #include <QtWidgets/QStatusBar> #include <QtWidgets/QToolBar> #include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_MainWindow { public: QMenuBar * menuBar; QToolBar * mainToolBar; QWidget * centralWidget; QStatusBar * statusBar; void setupUi( QMainWindow * MainWindow ) { if( MainWindow->objectName().isEmpty() ) MainWindow->setObjectName( QStringLiteral( "MainWindow" ) ); MainWindow->resize( 400, 300 ); menuBar = new QMenuBar( MainWindow ); menuBar->setObjectName( QStringLiteral( "menuBar" ) ); MainWindow->setMenuBar( menuBar ); mainToolBar = new QToolBar( MainWindow ); mainToolBar->setObjectName( QStringLiteral( "mainToolBar" ) ); MainWindow->addToolBar( mainToolBar ); centralWidget = new QWidget( MainWindow ); centralWidget->setObjectName( QStringLiteral( "centralWidget" ) ); MainWindow->setCentralWidget( centralWidget ); statusBar = new QStatusBar( MainWindow ); statusBar->setObjectName( QStringLiteral( "statusBar" ) ); MainWindow->setStatusBar( statusBar ); retranslateUi( MainWindow ); QMetaObject::connectSlotsByName( MainWindow ); } void retranslateUi( QMainWindow * MainWindow ) { MainWindow->setWindowTitle( QApplication::translate( "MainWindow", "MainWindow", 0 ) ); } };
namespace Ui { class MainWindow : public Ui_MainWindow { }; }
QT_END_NAMESPACE
#endif
a jeśli pytasz o connect to masz wyjaśnienie w postaci funkcji QMetaObject::connectSlotsByName( MainWindow );
Wystarczy slotowi dać odpowiednią nazwę a połączenie odbędzie się automatycznie!!! (przejdź do slotu !!!) |
|
Masterpc16 Temat założony przez niniejszego użytkownika |
» 2015-12-16 19:02:49 Rzeczywiście nie zauważyłem że zły plik podałem tutaj już jest dialog.cpp i dalej jest ten błąd :/ #include "dialog.h" #include "ui_dialog.h"
Dialog::Dialog( QWidget * parent ) : QDialog( parent ) , ui( new Ui::Dialog ) { ui->setupUi( this ); } Dialog::~Dialog() { delete ui; } void zaloguj() { QString login; login = ui->lineEdit->text(); }
czyli jak dobrze zrozumiałem jeśli chodzi o sloty mogę w qt creatorze w plikach ui nacisnąć na utworzony pushbutton i dać przejdź do slotu i w okienku wybieram np. clicked? |
|
mateczek |
» 2015-12-16 22:11:17 void Dialog::zaloguj() { QString login; login = ui->lineEdit->text(); }
Kompilator i qtcreator musiał Ci dokładnie wypluć, w którym miejscu mu się nie zgadza!!! Zważ, że w przypadku projektów wieloplikowych jest problem by ktoś mógł skompilować i zobaczyć co jest błędem !!! Notabene powinien ci jeszcze wypluć, że nie masz definicji funkcji zaloguj!!! podpowiedzi też pewnie nie działamy w obrębie definicji funkcji!!! Ps. Zobacz jak się definiuje metody klas w c++!!! Zainteresuj się opcją refaktorycja w QTCreator!!! - Bo sam dodaje definicję na podstawie deklaracji !!! |
|
Masterpc16 Temat założony przez niniejszego użytkownika |
» 2015-12-16 22:18:00 Oki dzięki za odpowiedź |
|
mateczek |
» 2015-12-17 06:08:37 |
|
« 1 » |