Temat: MainForm w środku Widget

Ktoś może miałby pomysł jak poprawić taki kod:

Tworzę Widget który w sobie ma umieszczone okno QMainWindow
które ma być rozpięte na cały obszar kontrolki.

Tylko jak zmusić aby mainwindow zmieniał rozmiar wraz z wymiarami VWidget ?


class VWidget : public QWidget
{
Q_OBJECT
public:
QMainWindow* mainwindow;

explicit VWidget(QWidget *parent = 0);
~VWidget();
}



VWidget::VWidget(QWidget *parent) :
QWidget(parent)
{
if (QAxFactory::isServer()&&true)
{

mainwindow = new QMainWindow();

mainwindow->show();
mainwindow->setParent(this);
mainwindow->setGeometry(0,0,this->width(),this->height());
}
}

Marceli Palak edytował(a) ten post dnia 07.12.11 o godzinie 14:19
Tomasz Ziobrowski

Tomasz Ziobrowski Oprogramowanie dla
przemysłu i nie
tylko

Temat: MainForm w środku Widget

Zamiast:


mainwindow->show();
mainwindow->setParent(this);
mainwindow->setGeometry(0,0,this->width(),this->height());

Po prostu zrób coś takiego:
 
QLayout * layout = new QHBoxLayout(); // Moze tez byc QVBoxLayout;
layout->addWidget(mainwindow);
setLayout(layout);

i gotowe.

Temat: MainForm w środku Widget

U mnie drobna poprawka musiała być, ale może to wynika ze specyfiki tego co jest jeszcze na mainwindow


mainwindow->show(); // bez tego nie che działac
// aplikacja sie zawiesza , tak jak by żadne komunikaty nie docierały do aplikacji

QLayout * layout = new QHBoxLayout(); // Moze tez byc QVBoxLayout;
layout->addWidget(mainwindow);
setLayout(layout);

// mainwindow->show(); // jak tutaj dam show to tez sie zawiesza :(


To że pokazuje okno zanim je rozciągnę na WIdget objawia się tym ze na chwile widać dodatkowe okno które po ułamku sekundy znika :)

Dlaczego jak zrobie w odwrotnej kolejności nie działa to brak koncepcji

A poza tym to wszystko działa OKMarceli Palak edytował(a) ten post dnia 07.12.11 o godzinie 14:20
Tomasz Ziobrowski

Tomasz Ziobrowski Oprogramowanie dla
przemysłu i nie
tylko

Temat: MainForm w środku Widget

W jaki sposób powołujesz do życia okienko VWidget? Czy one jest głównym oknem programu?

Zakładam, że w main.cpp masz coś w ten deseń.


VWidget widget;
widget.show();


wówczas nie powinieneś mieć konieczności wywoływania:
mainwindow->show();

W sumie nie pamiętam czy Layout robi to za ciebie czy nie (być może dlatego tak musisz zrobić) ... ale na wszelki wypadek możesz powołać MainWindow z rodzicem ustawionym na widget wewnątrz którego osadzasz.


mainwindow = new QMainWindow(this);


Z ciekawości: Dlaczego robisz to w ogóle w ten sposób? Co takiego robi VWidget, że jest ono ponad MainWindow?

Następna dyskusja:

MainForm w środku Widget II




Wyślij zaproszenie do