[gelöst] Buttongröße ändern
[gelöst] Buttongröße ändern
Hallo zusammen,
ich benutze PushButtons als Balken eines Diagramms und würde diese gerne zur Laufzeit ändern bzw. die Breite der Buttons.
ich habe mich shcon mit setgeometry, update, updategeometry, setminsize, setmaxsize probiert aber kam zu keinem Erfolg.
Es gibt kein Layout in dem Widget, wo die Buttons angzeigt werden.
Ich hoffe mir kann jemand helfen
ich benutze PushButtons als Balken eines Diagramms und würde diese gerne zur Laufzeit ändern bzw. die Breite der Buttons.
ich habe mich shcon mit setgeometry, update, updategeometry, setminsize, setmaxsize probiert aber kam zu keinem Erfolg.
Es gibt kein Layout in dem Widget, wo die Buttons angzeigt werden.
Ich hoffe mir kann jemand helfen
Zuletzt geändert von krone am 31. Januar 2010 15:55, insgesamt 1-mal geändert.
Code: Alles auswählen
button.resize(newSize);
oops, ist ja java, da gibts keinen operator->
Code: Alles auswählen
public class ButtonBar extends QPushButton
private int width;
private int height;
private int x;
private int y;
private int placedVotesPerson;
private int selectionID;
private int pollID;
private int place;
private BarChart parent; [public class BarChart extends QWidget]
Code: Alles auswählen
/**
* Updates color and size of bar
*/
private void updateColorAndSize() {
setGeometry(x, y + (place * 50), width, height);
resize(width, height);
// setFixedSize(width, height);
/** set color of button */
if (Data.getDataInstance().getListPoll(pollID).getHead()
.isLimitValternative()
&& DataManager.sumVotesPerAlternative(pollID, selectionID,
Data.listType) >= Data.getDataInstance().getListPoll(
pollID).getSelection(selectionID).getMaxPoints()) {
// max number of votes per alternative is set and max number of
// votes for this alternative reached
setStyleSheet("background-color: red"); //$NON-NLS-1$
} else if (Data.getDataInstance().getListPoll(pollID).getHead()
.isLimitValternative()) {
// max number of votes per alternative is set and max number of
// votes for this alternative is not reached
setStyleSheet("background-color: rgb(50,205,50)"); //$NON-NLS-1$
} else if (placedVotesPerson == 0) {
// limit for alternatives is not set and user did not voted for
// alternative
setStyleSheet("background-color: rgb(250,160,50)"); //$NON-NLS-1$
} else if (placedVotesPerson > 0) {
// limit for alternative is noet set and user voted for alternative
setStyleSheet("background-color: rgb(30,144,255)"); //$NON-NLS-1$
}
if (data.getListPoll(pollID).getMembers().get(
data.getListPoll(pollID).getMember(data.getUser().getUserID()))
.getPoints() == -1)
setStyleSheet("background-color: rgb(26,26,26)");
update();
updateGeometry();
}
Code: Alles auswählen
/**
* draw bar
*/
@Override
public void drawBar(QPainter painter) {
// Draw Name of Alternative
painter.setFont(new QFont("arial", 10)); //$NON-NLS-1$
painter.setPen(QColor.black);
painter.drawText(x + 5, y - 2 + (place * 50), getDescription());
painter.drawRoundedRect(x, y + (place * 50) /* +(i*50) */, width,
height, 10.0, 1.3);
updateColorAndSize();
// Draw Sum Votes for Alternative
painter.setPen(QColor.darkCyan);
painter.drawText(x + width + 5, y + height - 2 + (place * 50),
"" + getSumVotes()); //$NON-NLS-1$
parent.update();
parent.updateGeometry();
}
Die Größe width müsste eignetlich richtig sein, da wenn ich zusätzlich noch den button malen lasse, das richtige rauskommt. Nur der Button ändert seine Größe nicht.
Reduzier deinen Code, so dass du durchblickst
Denn ein resize funktioniert absolut problemlos!
Ist C++, da ich hier kein QtJambi installiert hab. Das funktioniert problemlos.
Denn ein resize funktioniert absolut problemlos!
Code: Alles auswählen
#include <QWidget>
#include <QPushButton>
#include <QSlider>
#include <QVBoxLayout>
#include <QHBoxLayout>
class Widget : public QWidget
{
Q_OBJECT
QPushButton *btn;
public:
Widget() {
QWidget* view = new QWidget(this);
btn = new QPushButton("Resize me!", view);
QSlider *heightSlider = new QSlider(Qt::Horizontal, this);
heightSlider->setMinimum(btn->height());
heightSlider->setMaximum(btn->height()*4);
QSlider *widthSlider = new QSlider(Qt::Horizontal, this);
widthSlider->setMinimum(btn->width());
widthSlider->setMaximum(btn->width()*4);
QHBoxLayout* sliderLayout = new QHBoxLayout;
sliderLayout->addWidget(heightSlider);
sliderLayout->addWidget(widthSlider);
QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(view);
mainLayout->addLayout(sliderLayout);
connect(heightSlider, SIGNAL(sliderMoved(int)), this, SLOT(changeHeight(int)));
connect(widthSlider, SIGNAL(sliderMoved(int)), this, SLOT(changeWidth(int)));
resize(500, 200);
}
public slots:
void changeHeight(int val) {
btn->resize(btn->width(), val);
}
void changeWidth(int val) {
btn->resize(val, btn->height());
}
};