C++ Qt Creator Variable für mehrere Buttons erstellen ?
Wie kann ich mit c++ und dem Program Qt Creator eine Variable erstellen durch welche ich mit dem einem Button eine Zahl abfrage also mehrere optionen und diese angeklickte zahl wird dann gespeicher und soll bei einem anderen Button dann als zahl festgelegt werden.
Die Button habe ich schon ich muss nur das mit der variable wissen.
Wie kann ich da jetzt die Variable anzahlmenu bei anderern Buttons intigrieren?
Dh du meinst , dass man die widget.ui datai dubliziert?
1 Antwort
Bei MenuBox1 handelt es sich also wohl um eine QMessageBox und das einzige was dir noch fehlt, ist das Setzen des Textes für einen Button. Dafür gibt es die setText-Methode.
MButton1->setText(QString::number(anzahlMenu));
Grundsätzlich würde ich dazu raten, sich an übliche Konventionen zu halten und daher Variablennamen stets mit einem Kleinbuchstaben zu beginnen. Dann wird auch einfacher ersichtlich, ob gerade ein Objekt eine Methode/Eigenschaft aufruft oder eine Klasse.
hier einmal den gesamten code den ich bisher für die Buttons habe:
#include "widget.h"
#include "ui_widget.h"
#include <QtCore>
#include <QtGui>
#include <QMessageBox>
int anzahlmenu;
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_menu_clicked()
{
// QMessageBox::information(this,"Titel hier","Hallo");
//--------------------------------------Menu-----------------------------------------------------
//-----------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------
QMessageBox msgBox;
QPushButton *MenuButton = msgBox.addButton(tr("Menu"), QMessageBox::ActionRole);
QPushButton *AbbruchButton = msgBox.addButton(tr("Abbruch"), QMessageBox::ActionRole);
msgBox.setDefaultButton(AbbruchButton);
msgBox.setText("Möchten sie wirklich das Menu öffnen?");
msgBox.setWindowTitle("Menu");
msgBox.exec();
if (msgBox.clickedButton() == MenuButton) {
// connect
QMessageBox MenuBox;
QPushButton *MButton1 = MenuBox.addButton(tr("Anzahl an Fenstern Ändern für Ja"), QMessageBox::ActionRole);
QPushButton *MButton2 = MenuBox.addButton(tr("Anzahl an Fenstern Ändern für Ne"), QMessageBox::ActionRole);
QPushButton *MButton3 = MenuBox.addButton(tr("3..."), QMessageBox::ActionRole);
QPushButton *MButton4 = MenuBox.addButton(tr("4..."), QMessageBox::ActionRole);
QPushButton *MButtonesc = MenuBox.addButton(tr("Abbruch"), QMessageBox::ActionRole);
MenuBox.setDefaultButton(MButtonesc);
MenuBox.setText("Willkommen im Menu.");
MenuBox.setWindowTitle("Menu");
MenuBox.setInformativeText("Bitte wählen: ");
MenuBox.exec();
if (MenuBox.clickedButton() == MButton1) {
// Anzahl an Fenstern Ändern
QMessageBox MenuBox1;{
QPushButton *MButton1 = MenuBox1.addButton(tr("1"), QMessageBox::ActionRole);
QPushButton *MButton2 = MenuBox1.addButton(tr("5"), QMessageBox::ActionRole);
QPushButton *MButton3 = MenuBox1.addButton(tr("10"), QMessageBox::ActionRole);
QPushButton *MButton4 = MenuBox1.addButton(tr("20"), QMessageBox::ActionRole);
QPushButton *MButtonesc = MenuBox1.addButton(tr("Abbruch"), QMessageBox::ActionRole);
MenuBox1.setDefaultButton(MButtonesc);
MenuBox1.setText("Die Anzahl an Fenstern, wenn man Ja klickt.");
MenuBox1.setWindowTitle("Menu/Anzahl an Fenstern Ändern");
MenuBox1.setInformativeText("Bitte wählen: ");
MenuBox1.exec();}
// if (MenuBox.clickedButton() == MButton1) {
// // Anzahl an Fenstern 1
// anzahlmenu = 1;
// qDebug() << "1 wurde geklickt"; }
if (MenuBox.clickedButton() == MButton2) {
// Anzahl an Fenstern 5
anzahlmenu = 5;
qDebug() << "5 wurde geklickt"; }
else if (MenuBox.clickedButton() == MButton3) {
// Anzahl an Fenstern 10
anzahlmenu = 10;
qDebug() << "10 wurde geklickt"; }
}
} else if (msgBox.clickedButton() == AbbruchButton ) {
// AbbruchButton
}
}
//--------------------------------------Menu-----------------------------------------------------
//-----------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------
void Widget::on_Ja_clicked()
{
QMessageBox * myBox;
srand(time(0));
int anzahl = anzahlmenu;
QStringList argument;
argument = QCoreApplication::arguments();
if(argument.count() >= 2)
anzahl = argument[1].toInt();
int x = 10, y = 10;
for(int i = 0; i < anzahl; i++)
{
x = rand() % 1920;
y = rand() % 1080;
myBox = new QMessageBox;
myBox->setGeometry(x, y, 70, 20);
myBox->show();
}
}
void Widget::on_Jaa_clicked()
{
QMessageBox * myBox;
srand(time(0));
int anzahl = 10;
QStringList argument;
argument = QCoreApplication::arguments();
if(argument.count() >= 2)
anzahl = argument[1].toInt();
int x = 10, y = 10;
for(int i = 0; i < anzahl; i++)
{
x = rand() % 1920;
y = rand() % 1080;
myBox = new QMessageBox;
myBox->setGeometry(x, y, 70, 20);
myBox->show();
}
}
void Widget::on_aboutButton_clicked()
{
QMessageBox::aboutQt(this,"Infos ");
}
void Widget::on_EscButton_clicked()
{
QApplication::quit();
}
Du hast eine Klasse angelegt (Widget). Von der kannst du mehrere Instanzen anlegen.
Widget window1;
window1.show();
Widget window2;
window2.show();
Jede Instanz ist gleich aufgebaut. Wenn du auf der Oberfläche also einen Button platziert hast, wird der sowohl bei window1, als auch bei window2 angezeigt. Beide Fenster agieren allerdings selbstständig. Der Button von Fenster 1 ist ein anderer, als auf Fenster 2.
Ok, noch eine kleine Korrektur meines obigen Snippets:
Widget window1(nullptr);
window1.show();
Widget window2(nullptr);
window2.show();
Da dein Konstruktor ja ein Argument erwartet. Wenn du ein Elternfenster hast, welches du angeben möchtest, gib statt nullptr einen Zeiger an, der auf dieses verweist.
Hallo erstmal danke für deine hilfe schon mal. Aber was genau macht:::: MButton1->setText(QString::number(anzahlMenu));