私は最近、C++ & Qtによるデータベースプログラミングの世界を掘り下げ始めました。質問があります。私は答えはおそらく非常に基本的ですが、私はそれを把握しているように見えることはできません知っている。メイン関数のデータベースに接続して他の関数から参照する方法
main関数でデータベースに接続し、それを他の関数から参照するにはどうすればよいですか?
基本的に、プログラムを最初に起動すると、メインウィンドウのインスタンスが作成されますが、表示する前に、後で実行するためにデータベースに接続します。私はウィンドウを表示します。偉大だが、接続名が関数の範囲外にあるため、データを入力してウィンドウを作成しようとすると、いいえ。
どうすればグローバルにすることができますか?私は主な機能の魔法使いのデータベースをすべてのクラスや関数から継承する必要があります(または少なくとも私は考えました)。
私はまだ学んでいるので、私はそれが継承がどのように働くかについてちょっとした誤解であると確信しています。
は、ここで私は私がデータベースから引き出されたデータを取り込むことができますドックを作成し、メインウィンドウの後に私の主な機能
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("LOCALHOST\\TestServer");
db.setDatabaseName("TestConnection");
w.show();
return a.exec();
}
とあります。ここで私はメインウィンドウでクエリをプリフォームする必要がありましたです:: Createdock機能は
void MainWindow::createDockWindows()
{
QDockWidget *rightDock = new QDockWidget(tr("Tasks"),this);
rightDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
todoGroupBox = new QGroupBox(rightDock);
todoGroupBox->setTitle(tr("To-Do List"));
QSqlDatabase(db.open());
if (db.open())
{
QMessageBox::information(this,"Connected","Connection to the Database was Established\n"
"\nStatus: Connected");
}
else
{
QMessageBox::information(this,"Not Connected","Connection to the Database could not be Established\n"
"\nStatus: Not Connected");
}
todoList = new QListWidget(todoGroupBox);
todoList->addItems(QStringList()
<< "Install Outlook on Jessies Computer"
<< "Purchase 2 Licenses of Adobe Suite"
<< "Contact UPS to put in a ticket to their IT dept.");
addToDoLabel = new QLabel;
addToDoLabel->setText(tr("Sample Text"));
addToDoButton = new QToolButton;
addToDoButton->setIcon(QIcon(":/images/gedit-icon.png"));
addToDoButton->setToolTip(tr("Create a new task"));
addToDoButton->setShortcut(tr("Ctrl+Shift+t"));
QHBoxLayout *todoButtonLayout = new QHBoxLayout();
todoButtonLayout->addWidget(addToDoLabel,0,Qt::AlignRight | Qt::AlignVCenter);
todoButtonLayout->addWidget(addToDoButton,0,Qt::AlignRight | Qt::AlignTop);
QVBoxLayout *todoLayout = new QVBoxLayout();
todoLayout->addWidget(todoList,0,Qt::AlignCenter);
todoLayout->addLayout(todoButtonLayout,0);
todoGroupBox->setLayout(todoLayout);
todoGroupBox->setMaximumSize(todoGroupBox->sizeHint());
}
データベースの接続はグローバルで、プレーンなデフォルトのものを使用し、複数の接続を使用しない場合は「うまく動作します」。コードの関連する部分を見ずに間違っていることを知ることはできません。 – Mat