• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[Qt] Okno-dialog Dodanie widgetów

Object Storage Arubacloud
0 głosów
1,736 wizyt
pytanie zadane 30 kwietnia 2015 w C i C++ przez Linker Bywalec (2,690 p.)
Mam okno w którym po naciśnięciu przycisku wyświetla się QDialog. Pytam się jak do tego "dialogu" dodać np. Labla i inne widgety. Chciałbym aby ustawić mu jakieś wymiary(bez setGeometry bo wtedy powstaje gdzieś a nie na środku okna) ma ktoś jakieś pomysły, rady?

2 odpowiedzi

0 głosów
odpowiedź 30 kwietnia 2015 przez Bondrusiek Maniak (61,410 p.)
Spróbuj stworzyc nową klasę(QDialog) w której znajduje się label oraz inne widgety. Następnie utwórz główny projekt i dodaj do niego tą klasę, którą potrzebujesz. W tym projekcie ustawiasz rodzica dla QDialog.
komentarz 30 kwietnia 2015 przez Linker Bywalec (2,690 p.)
Mógłbyś pokazać jak dodać wtedy tą klasę? Bo chyba nie wiem o co ci chodzi.
0 głosów
odpowiedź 1 maja 2015 przez Bondrusiek Maniak (61,410 p.)

Pokaże Tobie przykład:

listdialog.pro

#-------------------------------------------------
#
# Project created by QtCreator 2015-04-09T21:52:38
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = listdialog
TEMPLATE = app


SOURCES += main.cpp\
        listdialog.cpp \
    editdialog.cpp

HEADERS  += listdialog.h \
    editdialog.h

FORMS    += listdialog.ui \
    editdialog.ui

 

listdialog.h

#ifndef LISTDIALOG_H
#define LISTDIALOG_H

#include <QDialog>
#include "editdialog.h"
class EditDialog ;
namespace Ui {
class ListDialog;
}

class ListDialog : public QDialog
{
    Q_OBJECT

public:
    explicit ListDialog(QWidget *parent = 0);
    ~ListDialog();

private:
    Ui::ListDialog *ui;
private slots :
    void addItem();
    void editItem();
    void deleteItem();
};

#endif // LISTDIALOG_H

 

editdialog.h

#ifndef EDITDIALOG_H
#define EDITDIALOG_H

#include <QDialog>

namespace Ui {
class EditDialog;
}

class EditDialog : public QDialog
{

public:
    explicit EditDialog(QWidget *parent = 0);
    ~EditDialog();
    const QString name() const ;
    void setName(const QString&);
    const QString number() const ;
    void setNumber(const QString&);
private:
    Ui::EditDialog *ui;
};

#endif // EDITDIALOG_H

 

editdialog.cpp

#include "editdialog.h"
#include "ui_editdialog.h"

EditDialog::EditDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::EditDialog)
{
    ui->setupUi(this);
}

EditDialog::~EditDialog()
{
    delete ui;
}

const QString EditDialog::name() const
{
    return ui->nameEdit->text().replace("--","");
}

void EditDialog::setName(const QString &name)
{
    ui->nameEdit->setText(name);
}

const QString EditDialog::number() const
{
    return ui->numberEdit->text().replace("--","");
}

void EditDialog::setNumber(const QString &name)
{
    ui->numberEdit->setText(name);
}

 

listdialog.cpp

#include "listdialog.h"
#include "ui_listdialog.h"

ListDialog::ListDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::ListDialog)
{
    ui->setupUi(this);
    connect(ui->addButton,SIGNAL(clicked()),this ,SLOT(addItem()));
    connect(ui->editButton,SIGNAL(clicked()) , this , SLOT(editItem()));
    connect(ui->deleteButton,SIGNAL(clicked()),this , SLOT(deleteItem()));
}

ListDialog::~ListDialog()
{
    delete ui;
}

void ListDialog::addItem()
{
    EditDialog dlg(this);
    if(dlg.exec() == Accepted)
        ui->list->addItem(dlg.name() + "--" + dlg.number());

}

void ListDialog::deleteItem()
{
    delete ui->list->currentItem();
}

void ListDialog::editItem()
{
    if(!ui->list->currentItem())
        return ;
    QStringList parts = ui->list->currentItem()->text().split("--");
    EditDialog dlg(this);
    dlg.setName(parts[0].trimmed());
    dlg.setNumber(parts[1].trimmed());
    if(dlg.exec() == Accepted)
        ui->list->currentItem()->setText(dlg.name() + "--" + dlg.number());
}

main.cpp

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

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    ListDialog w;
    w.show();

    return a.exec();
}

editdialog.ui

listdialog.ui

Troche dlugi ale pokazuje jak można połączyć 2 widgety. Musisz najpierw dodać do klasy , klase class EditDialog;

Aby wywołać widget:

EditDialog dlg(this);

Jeśli chcerz dodać plik do projektu naciśnij prawym przyciskiem na nazwe pliku i wciśnij dodaj istniejące pliki...

komentarz 2 maja 2015 przez Linker Bywalec (2,690 p.)
Komilator mówi że nie ma pilko moc_qdialog.cpp (nazwa pliku dialogu)
komentarz 2 maja 2015 przez Bondrusiek Maniak (61,410 p.)

Wklej poprostu kod bo tak na oko ciężko pomoc. Dodaj może do pliku.h do klasy makro: Q_OBJECT(w sekcji private).

komentarz 2 maja 2015 przez Linker Bywalec (2,690 p.)

Sorry mój błąd, już naprawiony. Teraz robię cały dialog.smiley

komentarz 2 maja 2015 przez Linker Bywalec (2,690 p.)
Dalej nie widaćř widgetó. Jakieś pomysły?
komentarz 2 maja 2015 przez Bondrusiek Maniak (61,410 p.)
Podaj cały kod. Tak na omacku nic nie pomoge.
komentarz 2 maja 2015 przez Linker Bywalec (2,690 p.)

qdialog.h

#ifndef QDIALOG
#define QDIALOG
#include <QLabel>
#include <QWidget>
#include <QDialog>
#include <QMainWindow>


class Dialog : public QDialog
{
    Q_OBJECT
public:
    Dialog(QWidget *parent = 0);
    ~Dialog();


private:
    QLabel *imie;
    QLabel *nazwisko;

};

#endif // QDIALOG

qdialog.cpp

#include "qdialog.h"

Dialog::Dialog(QWidget *parent)
    :QDialog(parent)
{
    QLabel *imie = new QLabel(this);
    imie->setGeometry(100, 100, 250, 200);
    imie->show();
    QLabel *nazwisko = new QLabel(this);
}

Dialog::~Dialog()
{

}

 

A tu wywołanie w mainwindow.cpp:

    Dialog dlg(this);
    dlg.exec();

 

komentarz 2 maja 2015 przez Bondrusiek Maniak (61,410 p.)

Dodaj do qdialog.cpp poniżej imie->setGeometry(100, 100, 250, 200);

imie->setText(("Witaj"));

i powinno sie wyswietlić Witaj

 

Podobne pytania

0 głosów
1 odpowiedź 794 wizyt
pytanie zadane 28 czerwca 2019 w C i C++ przez amelia.cpp Obywatel (1,860 p.)
0 głosów
2 odpowiedzi 990 wizyt
pytanie zadane 29 sierpnia 2018 w C i C++ przez niezalogowany
0 głosów
2 odpowiedzi 478 wizyt
pytanie zadane 1 maja 2017 w C i C++ przez Cirt Początkujący (300 p.)

92,698 zapytań

141,614 odpowiedzi

320,144 komentarzy

62,058 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...