現在Qt5でデータベース管理ソフトウェアを開発中です。私は、プログラムの主なレイアウトにリンクされた私のウィジェットの一部を隠しておきたいと思います(QComboBoxを使って表示するかどうかを選択する)。すべてのウィジェットはMainWindowクラスのメンバーです。show()の後にウィジェットが表示されない - C++/Qt5
void MainWindow::mode1Rebuild()
{
mod1TableDesc->show();
fieldSelect->show();
value->show();
filter1->show();
exactBox->show();
borderBox->show();
lowvalue->show();
lowvalueDesc->show();
highvalue->show();
highvalueDesc->show();
recherche1->show();
}
しかし、私が管理したことがない:私はそれらを表示する方法
void MainWindow::mode1Cleanup()
{
mod1TableDesc->hide();
fieldSelect->hide();
value->hide();
filter1->hide();
exactBox->hide();
borderBox->hide();
lowvalue->hide();
highvalue->hide();
recherche1->hide();
highvalueDesc->hide();
lowvalueDesc->hide();
}
そして、これは次のようになります。これは私がそれらを隠す方法です
void MainWindow::mode1Buildup()
{
extractTables();
mod1TableDesc = new QLabel("Cette requête a pour but \n de filtrer la table client \n avec ce paramètre :");
mainLayout->addWidget(mod1TableDesc,3,0,1,1,Qt::AlignLeft);
QSqlQuery query;
if(query.exec("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_SCHEMA='auchan' AND TABLE_NAME='approvisionnement')"))
{
while(query.next())
{
fieldNames.push_back(q2c(query.value(0).toString()));
}
createFieldBox();
}
else
{
QMessageBox::about(this, "Tables non récupérées", "La récupération des tables a échouée");
}
exactBox = new QComboBox;
exactBox->addItem("Contient");
exactBox->addItem("Commence par");
exactBox->addItem("fini par");
exactBox->addItem("Condition");
mainLayout->addWidget(exactBox, 5,0,1,1,Qt::AlignLeft);
filter1 = new QComboBox;
filter1->addItem("=");
filter1->addItem("<=");
filter1->addItem(">=");
filter1->addItem("<");
filter1->addItem(">");
mainLayout->addWidget(filter1,6,0,1,1,Qt::AlignLeft);
value = new QLineEdit();
mainLayout->addWidget(value,7,0,1,1,Qt::AlignLeft);
value->setObjectName("test1");
borderBox = new QCheckBox("Cochez pour avoir une valeur \n comprise dans un ensemble", this);
connect(borderBox, SIGNAL(clicked(bool)), this, SLOT(makeInter()));
mainLayout->addWidget(borderBox, 8,0,1,1,Qt::AlignLeft);
lowvalueDesc = new QLabel("Entrez la valeur minimum");
mainLayout->addWidget(lowvalueDesc, 9,0,1,1,Qt::AlignLeft);
lowvalueDesc->setVisible(false);
lowvalue = new QLineEdit();
mainLayout->addWidget(lowvalue, 10,0,1,1,Qt::AlignLeft);
lowvalue->setVisible(false);
highvalueDesc = new QLabel("Entrez la valeur maximum");
mainLayout->addWidget(highvalueDesc, 11,0,1,1,Qt::AlignLeft);
highvalueDesc->setVisible(false);
highvalue = new QLineEdit();
mainLayout->addWidget(highvalue, 12,0,1,1,Qt::AlignLeft);
highvalue->setVisible(false);
recherche1 = new QPushButton("recherche");
connect(recherche1, SIGNAL(clicked(bool)), this, SLOT(execReq1()));
mainLayout->addWidget(recherche1,13,0,1,1,Qt::AlignLeft);
}
: これは私がウィジェットを作成する方法でありますそれらを再度表示する。それらはメインレイアウトから削除されません。私はガベージコレクタにキャッチされているかもしれないと思っていますが、チェック/修正方法がわかりません。完全なコードたくに関して
: https://github.com/Sysmetryx/ESME-PROJET-IHM-BDD/tree/V.2Debug
を私もしてみました - >のsetVisible(真)とのsetVisible(false)を、同等のもの、それは何も変わっていません。 また、私はこのスレッドを見ました: QWidget not showing after calling show() そして、答えが分からないのは、主にPythonであるからです。
は、私は本当に理由は、コードを経由してレイアウトするウィジェットを追加表示されません、お時間 よろしく、 ネイサン
問題はtypoによって引き起こされます。あなたは 'if'ステートメントにカンマが1つあります:https://github.com/Sysmetryx/ESME-PROJET-IHM-BDD/blob/V.2Debug/mainwindow.cpp #L171: 'else if(reqSelect-> currentText()==" Insertion dedonnées ")**; **'、https://github.com/Sysmetryx/ESME-PROJET-IHM-BDD/blob/V。 2Debug/mainwindow.cpp#L380: 'if(query.exec(sqlQuery))**; **'とhttps://github.com/Sysmetryx/ESME-PROJET-IHM-BDD/blob/V.2Debug/mainwindow .cpp#L424: 'if(query.exec(queryText))**; **'。これらのカンマを削除すると、プログラムが正しく実行されます。 – eyllanesc
これらのすべてのケースでは、次の警告が返されます:**警告:この 'if'句はガードしません。[-Wmisleading-indentation] **、したがって、この質問は単純な誤植であるため閉じなければなりません。 SOコミュニティをまったく助けません。 – eyllanesc
それを見ていただきありがとうございます、それはすぐに問題を解決しました。 それは本当に閉鎖されるべきです。タイプミスであなたを気にして申し訳ありません。 – Sysmetryx