[gelöst] Buttongröße ändern

Alles zum Qt Framework für Java
Antworten
krone
Beiträge: 12
Registriert: 11. November 2009 20:10

[gelöst] Buttongröße ändern

Beitrag von krone »

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
Zuletzt geändert von krone am 31. Januar 2010 15:55, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Code: Alles auswählen

button.resize(newSize);
// edit:
oops, ist ja java, da gibts keinen operator->
krone
Beiträge: 12
Registriert: 11. November 2009 20:10

Beitrag von krone »

hab ich auch schon probiert.

ging ebenfalls nicht
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Dann zeig bitte mehr Code. Denn ein nicht gelayouteter PushButton lässt sich ohne weiteres resize()en.
krone
Beiträge: 12
Registriert: 11. November 2009 20:10

Beitrag von krone »

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.
krone
Beiträge: 12
Registriert: 11. November 2009 20:10

Beitrag von krone »

Weiß niemand einen Rat für mich? :(

Beispielcode würde mich auch weiterbringen. Auch wenns nciht in java ist.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Reduzier deinen Code, so dass du durchblickst ;)
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());
    }
};    
Ist C++, da ich hier kein QtJambi installiert hab. Das funktioniert problemlos.
krone
Beiträge: 12
Registriert: 11. November 2009 20:10

Beitrag von krone »

Danke, ich habs jetzt hinbekommen
Antworten