C++ Qt Creator Variable für mehrere Buttons erstellen ?


28.11.2021, 11:58

@regex9

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.

1Manui1 
Fragesteller
 27.11.2021, 19:49

Hallo erstmal danke für deine hilfe schon mal. Aber was genau macht:::: MButton1->setText(QString::number(anzahlMenu));

0
regex9  27.11.2021, 20:19
@1Manui1

Der Wert von anzahlMenu wird zu einem QString konvertiert (vereinfacht: aus 1 wird "1"). Die setText-Methode setzt diese Zeichenkette als Titel für MButton1.

1
1Manui1 
Fragesteller
 27.11.2021, 22:15
@regex9

ich hab ja so einzelne Fenster mit immer Button drin gemacht. Kann man irgendwie das Fenster nochmal öffnen ohne alles neu festzulegen?

0
regex9  27.11.2021, 22:47
@1Manui1

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.

0
1Manui1 
Fragesteller
 28.11.2021, 11:57
@regex9

Dh du meinst , dass man die widget.ui datai dubliziert?

0
regex9  28.11.2021, 18:48
@1Manui1

Du brauchst keine Dateien duplizieren. Um zweimal dasselbe Fenster zu erhalten, reicht mein letztes Snippet. Jedes erstellte Widget-Objekt nutzt die Ressourcen der Widget-Klasse. Seien es Eigenschaften oder Methoden. Die Definition des UI gehört dazu.

0
regex9  28.11.2021, 18:53
@regex9

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.

0
1Manui1 
Fragesteller
 28.11.2021, 19:52
@regex9

und wo muss ich das reinschreiben?

0
regex9  28.11.2021, 22:14
@1Manui1

Da, wo (bzw. zu welchem Zeitpunkt) du die Fenster erzeugen möchtest.

0
1Manui1 
Fragesteller
 27.11.2021, 19:51

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();
}

0