• 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,682 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,370 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,370 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,370 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,370 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,370 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ź 787 wizyt
pytanie zadane 28 czerwca 2019 w C i C++ przez amelia.cpp Obywatel (1,860 p.)
0 głosów
2 odpowiedzi 975 wizyt
pytanie zadane 29 sierpnia 2018 w C i C++ przez niezalogowany
0 głosów
2 odpowiedzi 467 wizyt
pytanie zadane 1 maja 2017 w C i C++ przez Cirt Początkujący (300 p.)

92,579 zapytań

141,432 odpowiedzi

319,657 komentarzy

61,963 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...