Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

ui was not declared in this scope w qt

Ostatnio zmodyfikowano 2015-12-17 06:08
Autor Wiadomość
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ę:
C/C++
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)
C/C++
#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 :)
P-142015
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!!!

C/C++
/********************************************************************************
** Form generated from reading UI file 'mainwindow.ui'
**
** Created by: Qt User Interface Compiler version 5.4.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#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 ); // a tutaj twoje pytanie o sloty !!!
    } // setupUi
   
    void retranslateUi( QMainWindow * MainWindow )
    {
        MainWindow->setWindowTitle( QApplication::translate( "MainWindow", "MainWindow", 0 ) );
    } // retranslateUi
   
};

namespace Ui {
    class MainWindow
        : public Ui_MainWindow
    { };
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H


a jeśli pytasz o connect to masz wyjaśnienie w postaci funkcji

C/C++
QMetaObject::connectSlotsByName( MainWindow ); // a tutaj twoje pytanie o sloty !!!

Wystarczy slotowi dać odpowiednią nazwę a połączenie odbędzie się automatycznie!!! (przejdź do slotu !!!)
P-142036
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 :/
C/C++
#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?
P-142056
mateczek
» 2015-12-16 22:11:17
C/C++
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 !!!
P-142070
Masterpc16
Temat założony przez niniejszego użytkownika
» 2015-12-16 22:18:00
Oki dzięki za odpowiedź
P-142071
mateczek
» 2015-12-17 06:08:37
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?

Możesz tak zrobić jeśli chcesz slot oprogramować (stworzyć nowy) !!! Jeśli chcesz tylko połączyć sygnał clicked() ze slotem np quit() (np. okna głównego). To możesz to nawet zrobić w designerze lub za pośrednictwem polecenia connect
https://upload.wikimedia.org​/wikibooks/pl/a/a3​/Programowanie_Qt4_Qt_designer_edycja_sygna%C5%82%C3%B3w_i_slot%C3%B3w.png

W przypadku takim jak np. w kursie o wątkach https://www.youtube.com/watch​?v=W3omS_AXZIs już nie wyklikasz i trzeba użyć connect()!!!
P-142079
« 1 »
  Strona 1 z 1