Wie auto-resize-qt-widget?
QT Version: 4.5.2
OS: ubuntu 8.04
Ich habe ein Problem mit der auto-Größenänderung von widgets, hier ist ein Beispiel:
alt-text http://img15.imageshack.us/img15/3479/autoresize.png
Wie die Abbildung zeigt, sind hier zwei widgets, man ist ein "StrWidget"(das Obere widget in der Abbildung 1), die 5 QLabels für die zeigen, die Saiten, der andere ist ein "CtrlWidget" was sagt StrWidget was string zu zeigen.
Wenn ich auf "senden CCC", die StrWidget wird das widget in Abbildung 2 dargestellt
Aber wenn ich auf "senden" wieder, die StrWidget wird das widget in Abbildung 3 dargestellt
Gibt es eine member-Funktion StrWidget::changeString das ist ein slot von StrWidget und erhalten Sie die Zeichenfolge, um Sie anzuzeigen.
void
StrWidget::changeString(QString inputStr)
{
for(int i=0;i<5;i++){
strEntries[i]->setText(inputStr);
}
}
den StrWidget nicht auto-resize-selbst wenn changeString genannt wird. Ich versuche die folgenden zwei Methoden:
(1) Legen Sie die "adjustSize()" in StrWidget::changeString, es funktioniert, aber ich muss auf einen button zweimal, um es in der Größe angepasst. Ich weiß nicht, warum es passiert.
(2) Legen Sie die "hide();show();" in StrWidget::changeString, es funktioniert, aber das StrWidget würde erröten, wenn ich auf Tasten.
Dosis jemand eine Idee dazu? Danke~
Im folgenden ist der Quellcode der Beispiel
main:
#include "StrWidget.h"
#include "CtrlWidget.h"
#include <QApplication>
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
StrWidget *strWidget=new StrWidget(0);
CtrlWidget *ctrlWidget=new CtrlWidget(0);
strWidget->show();
ctrlWidget->show();
QObject::connect(ctrlWidget,SIGNAL(sendString(QString)),strWidget,SLOT(changeString(QString)));
int ref=app.exec();
strWidget->deleteLater();
ctrlWidget->deleteLater();
return ref;
}
StrWidget.h
#include <QWidget>
#include <QString>
#include <QLabel>
#ifndef _StrWidget_H_
#define _StrWidget_H_
class StrWidget:public QWidget
{
Q_OBJECT
public:
StrWidget(QWidget *parent=0);
private:
QLabel *strEntries[5];
public slots:
void changeString(QString inputStr);
void clearString();
};
#endif
StrWidget.cpp
#include "StrWidget.h"
#include <QPushButton>
#include <QHBoxLayout>
StrWidget::StrWidget(QWidget *parent):QWidget(parent)
{
//main layout
QHBoxLayout *mainLayout=new QHBoxLayout(this);
setLayout(mainLayout);
//info label setup
for(int i=0;i<5;i++){
strEntries[i]=new QLabel(this);
strEntries[i]->setText("A");
strEntries[i]->setFrameShape(QFrame::StyledPanel);
mainLayout->addWidget(strEntries[i]);
}
//clearBtn setup
QPushButton *clearBtn=new QPushButton(tr("Clear Str"),this);
connect(clearBtn,SIGNAL(clicked()),this,SLOT(clearString()));
mainLayout->addWidget(clearBtn);
}
void
StrWidget::changeString(QString inputStr)
{
for(int i=0;i<5;i++){
strEntries[i]->setText(inputStr);
}
}
void
StrWidget::clearString()
{
changeString("");
}
CtrlWidget.h
#include <QWidget>
#include <QString>
#ifndef _CtrlWidget_H_
#define _CtrlWidget_H_
class CtrlWidget:public QWidget
{
Q_OBJECT
public:
CtrlWidget(QWidget *parent=0);
signals:
void sendString(QString sentStr);
};
CtrlWidget.cpp
#include "CtrlWidget.h"
#include <QHBoxLayout>
#include <QPushButton>
#include <QSignalMapper>
CtrlWidget::CtrlWidget(QWidget *parent):QWidget(parent)
{
//main layout
QHBoxLayout *mainLayout=new QHBoxLayout(this);
setLayout(mainLayout);
//control btns setup
QPushButton *sendABtn=new QPushButton("send A",this);
QPushButton *sendBBBtn=new QPushButton("send BB",this);
QPushButton *sendCCCBtn=new QPushButton("send CCC",this);
mainLayout->addWidget(sendABtn);
mainLayout->addWidget(sendBBBtn);
mainLayout->addWidget(sendCCCBtn);
//map setup
QSignalMapper *btnMapper=new QSignalMapper(this);
btnMapper->setMapping(sendABtn,"A");
btnMapper->setMapping(sendBBBtn,"BB");
btnMapper->setMapping(sendCCCBtn,"CCC");
connect(btnMapper,SIGNAL(mapped(QString)),this,SIGNAL(sendString(QString)));
//connection setup
connect(sendABtn,SIGNAL(clicked()),btnMapper,SLOT(map()));
connect(sendBBBtn,SIGNAL(clicked()),btnMapper,SLOT(map()));
connect(sendCCCBtn,SIGNAL(clicked()),btnMapper,SLOT(map()));
}
Sorry, ich wusste nicht, dass das original Bild für heute... und ich Frage ImageShack für die Hilfe, aber sagen Sie sorry zu...
InformationsquelleAutor Sibevin Wang | 2010-01-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie versuchen,
in
changeString()
. Dass Kräfte das layout erneuert werden. (Du musst machenmainLayout
eine in der Klasse, obwohl, oder alternativ Holen Sie sich das layout durchlayout()
).Versuchen Sie auch, das hinzufügen der Steuerelemente mit einem stretch-Faktor von null:
InformationsquelleAutor balpha