0

私は、さまざまな機能で作業するためにいくつかの積み重ねられたウィンドウを作成するプログラムに取り組んでいます。これらのウィンドウは、独自の分離されたクラスで作成されます。積み重ねられたウィンドウの1つに複数のドックがあり、ウィンドウメニューからそれらを切り替えて表示または非表示にできるようにしたいと考えています。それらがメインウィンドウクラスの一部である場合、これを行うことができますが、ファイルは巨大です。私の問題は、メイン ウィンドウには既にレイアウトがあるため、エディター クラスにメイン ウィンドウを継承させると、レイアウトを表示することさえできないように見えることです。それでも、コンパイラはアクションをメニューに追加する行に対してエラーをスローしていました。これらを別々のクラスに保持しながら、mainwindow クラスのプライベート メンバーを使用できるようにする方法について、誰か提案はありますか。高度なヘルプをありがとう!

エディタ ページが呼び出されるメイン ウィンドウの一部

MainWindow::MainWindow(QWidget *parent)
{
createActions();
createMenu();
createStatusBar();
createDocks();

createMainWidget();

readSettings();

setWindowTitle("Black Ops Bsuiness Group's ERP System - Version 0.0.0.1");
}

void MainWindow::createMainWidget()
{
contentsIconWidget = new QListWidget();
contentsIconWidget->setViewMode(QListView::IconMode);
contentsIconWidget->setIconSize(QSize(70,70));
contentsIconWidget->setMovement(QListView::Static);
contentsIconWidget->setMaximumWidth(75);
contentsIconWidget->setMinimumWidth(75);
contentsIconWidget->setSpacing(10);
contentsIconWidget->setStyleSheet("QListWidget {background-color:#333;    color:#0099FF;}");

mainContentPages = new QStackedWidget();
mainContentPages->addWidget(new HomePage);
mainContentPages->addWidget(new AnalyticsPage);
mainContentPages->addWidget(new EditorPage);
mainContentPages->setStyleSheet("QStackedWidget {border:1px solid #888;}");
setCentralWidget(mainContentPages);

createIcons();
contentsIconWidget->setCurrentRow(0);

QHBoxLayout *hMainLayout = new QHBoxLayout();
hMainLayout->addWidget(contentsIconWidget,0);
hMainLayout->addWidget(mainContentPages,0);
hMainLayout->setSpacing(0);
hMainLayout->setMargin(0);

QFrame *mFrame = new QFrame(this);
mFrame->setLayout(hMainLayout);
setCentralWidget(mFrame);
}

さまざまなビュー ステート レイアウトが保存されているビュー ソース ページの一部

EditorPage::EditorPage(QWidget *parent) : QWidget(parent)
{
mdiArea = new QMdiArea;
mdiToolBox = new QToolBox;

QDockWidget *dock = new QDockWidget(tr("SQL Manager"));
//MainWindow::windowMenu->addAction(dock->toggleViewAction());
//MainWindow::windowMenu->addAction(dock->toggleViewAction());

QDockWidget *dock1 = new QDockWidget(tr("SQL Manager"));

QSplitter *splitter = new QSplitter();
splitter->setOrientation(Qt::Vertical);
splitter->addWidget(mdiArea);
splitter->addWidget(dock);

QSplitter *splitter1 = new QSplitter();
splitter1->setOrientation(Qt::Horizontal);
splitter1->addWidget(dock1);
splitter1->addWidget(splitter);

QHBoxLayout *mainLayout = new QHBoxLayout();
mainLayout->addWidget(splitter1);
mainLayout->setSpacing(0);
mainLayout->setMargin(0);
setLayout(mainLayout);

}

ビュー クラスのヘッダー ファイルの一部

class EditorPage : public QWidget
{
public:
EditorPage(QWidget *parent = 0);

private:
QMdiArea *mdiArea;
QToolBox *mdiToolBox;
};
4

1 に答える 1

1

Qt の方法は、これにシグナルとスロットを使用することです。

エディター ウィンドウはtoggleDock()スロットを取得し (おそらくintまたは列挙値を取る)、メイン ウィンドウはシグナル (カスタム シグナル、QAction によってトリガーされるもの、またはボタン ウィジェットからのいずれか) を介してそのスロットを呼び出します。

これにより、クラス間に静的な依存関係がなくなります。

(ドック ウィジェットへのポインターをメンバーとして (おそらく配列内に) 格納すると、コーディングが容易になることに注意してください。)

于 2012-06-03T05:36:51.273 に答える