Important: Please read the Qt Code of Conduct -

[Resolved] Create a base project to show a simple dialog starting from an empty project

  • Hi !

    I'm studying Qt 5.2. I downloaded the mingw "edition".

    I need you help to have a step-by-step [and updated) info about starting a widget app.

    I do this

    • Start the QtCreator
    • Choose the Other Projects -> Empty Qt Project
    • Choose the source dir

    Actually I got an empty .pro.

    Now I'd like to create just a dialog

    • right-click on project name and add Qt->Qt Desgner Form Class
    • I choose Dialog withouth buttons and leave othe properties untouched
    • Add a button
    • Save all
    • right-click on project and add c++ -> c++ source file, calling it main.cpp

    Now my .pro looks as:

    FORMS +=

    HEADERS +=

    SOURCES +=

    The main question is: what's the best-practice code ?

    I used this

    #include "dialog.h"
    #include <QApplication>

    int main(int argc, char *argv[])
    QApplication a(argc, argv);
    Dialog w;;

    return a.exec(&#41;;


    But i got this error:

    bq. C:\Qt_Projects\Hello10\dialog.h:4: error: QDialog: No such file or directory
    #include <QDialog>

    What's the problem.. ?

  • Oh ..... I was missing only this:

    QT += widgets

    But ... why Qt Creator can't rebuild the .pro 'automatically' ?

    I found this info googling, but .. how can I understand with module is missing in .pro from error "QDialog is missing"?

  • If this feature will be included in QT Creator, some problems been solved.

  • Moderators


    What you've done is correct. But for convenience, you can select Applications -> Qt Widgets Application to achieve the same result.

    [quote]But … why Qt Creator can’t rebuild the .pro ‘automatically’ ?

    I found this info googling, but .. how can I understand with module is missing in .pro from error “QDialog is missing”?[/quote]Qt Creator can't edit your .pro file automatically because it doesn't know which module QDialog is in, either.

    To find out which module you need, you can search the documentation. I normally use Google, with the help of this "Chrome extension":

    To search offline, you can open Qt Creator and select_Help -> Index_. Then, search for the class you want.

    Example: At the top of the QDialog reference ( ), it says "qmake: QT += widgets". This tells you what you need to add to your .pro file.

  • Thanks.

    Now I'm going on editing the form.

    I have a label, a lineEdit, two pushButtons, and a h-spacer.

    I'm starting to try to use lineEdit validator.
    I write

    QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
    lineEdit->setValidator(new QRegExpValidator(regExp, this));

    But when I compile I got 2 errors

    C:\Qt_Projects\Hello10\dialog.cpp:1: In file included from ..\Hello10\dialog.cpp:1:0:
    C:\Qt_Projects\Hello10\dialog.h:15: error: 'QLineEdit' does not name a type
    QLineEdit *lineEdit;


    C:\Qt_Projects\Hello10\dialog.cpp:-1: In constructor 'Dialog::Dialog(QWidget*)':
    C:\Qt_Projects\Hello10\dialog.cpp:11: error: 'lineEdit' was not declared in this scope
    lineEdit->setValidator(new QRegExpValidator(regExp, this));

    Why? Probably, I think, because header file of the form doesn't declare the label itself.

    So I open header file of the dialog. Actually it look like

    #ifndef DIALOG_H
    #define DIALOG_H

    #include <QDialog>

    namespace Ui {
    class Dialog;

    class Dialog : public QDialog

    explicit Dialog(QWidget *parent = 0);

    Ui::Dialog *ui;

    #endif // DIALOG_H

    So I tried to add into the "section" public this row

    QLabel *label;

    and the include at the top

    #include <QLabel>

    But the second error is still here

    bq. ‘lineEdit’ was not declared in this scope

  • Ok, I found the answer:

    ui->lineEdit ....

    Next step: signals

    connect(ui->cancelButton, SIGNAL(clicked()), this, SLOT(reject()));

    This time every thing works ok, but I cannot understand this why I don't need to declare in .h file .. ?

  • Moderators

    [quote]I cannot understand this why I don't need to declare in .h file .. ?[/quote]Declare what?

    The clicked() signal comes from the QPushButton header. It is is included by "ui_dialog.h", which is auto-generated from dialog.ui when you build your project.

    You will need to declare your reject() slot in your dialog.h, and implement it in dialog.cpp

  • ok, so signals already declared not need to be redeclared... yes, it's obvious now.

    bq. You will need to declare your reject() slot ..

    this is not mine, it's a default slot... like accept()


    I'm actually doing experiment extending QDialog, not a main window. So I can use the public slot of QDialog.

    I'm closing thread as resolved

Log in to reply