QT(C ++)UIを複数のウィジェットサブクラスに分割し、同じクラスのすべてと同じように表示するにはどうすればよいですか?

セス・D・フルマー

私はQTを学び(私はすでにC ++をよく知っています)、UIをうまく表示しようとしていますが、QTCreatorに付属のQTDesignerを使用したくありません。私は次のクラスを持っています:

#include "MainPanel.h"
#include<QVBoxLayout>

MainPanel::MainPanel(QWidget *parent)
    : QWidget(parent)
{
    QLayout *lo = new QVBoxLayout(this);
    mList = new QListWidget(this);

    mList->addItem("Testing");
    setLayout(lo);
    lo->addWidget(mList);
    lo->setSpacing(5);
}

メインウィンドウクラスには追加の保護された関数がたくさんありますが、initControlsメソッドはこれを実行します。

void MainWindow::initControls()
{
    QHBoxLayout *loMain = new QHBoxLayout(this);

    loMain->addWidget(new MainPanel(this));
    setLayout(loMain);
}

MainPanelからMainWindow :: initControls()に、またはコンストラクター(いずれかの方法)にすべてのコードを配置すると、機能します-単一の項目「Testing」を含むリストウィジェットが表示されます。ただし、MainPanelのコードでは、「テスト」という単語に適合しない非常に小さな長方形として表示され、部分的にもテキストの類似性はありません。

sizeHint()をオーバーライドし、コードを移動してリストウィジェットを作成し、メソッドgetList()に返して、sizeHintからもアクセスできるようにしましたが、何もしませんでした。まだ小さな長方形が表示されます。

ウィジェットを適切にペイントするには、何が間違っているのでしょうか。また、何を行う必要がありますか。このUIに追加したいコントロールが他にもあります(リストウィジェットの下のボタンパネルとウィンドウの右側の2/3にある詳細パネル)が、これを表示できるようになるまで、続行できない可能性があります。残り。

また、これを完全にコードで実行したいと思います。視覚に問題があり、フォームに正しく配置するのが難しいため、デザイナーを使用しません。

誰か助けてください-QTのウェブサイトのドキュメント以外のドキュメントとチュートリアルは、それが正しい方向を示している場合に役立ちます。QWidget、QListWidget、QLayout、QH(およびV)BoxLayoutsの下にあるQTのドキュメントサイトをすでに見ましたが、何も表示されず、チュートリアルの多くがデザイナーについて説明しています。

誰かがSSMEやその他の小さなプログラムの作成について叱る前に(問題を表示する最小のプログラムを提供しました)、コードをすべてメインウィンドウに配置すると修正されることはわかっていますが、1つのクラスにすべてを含めることはできません。

MasterAler

わかりました、あまりにも不明確です、そこで何が起こっているのか、私たちはあなたのコードのより多くを要求するべきでした=)

これは可能な限り最小のサンプルであり、達成しようとしていたはずのことを示しています。

mainwindow.cpp:

#include "mainwindow.h"
#include "mainpanel.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    MainPanel* p = new MainPanel(this);
    setCentralWidget(p);
}

mainpanel.h:

#include "mainpanel.h"

#include <QListWidget>
#include <QLayout>

MainPanel::MainPanel(QWidget *parent)
    : QWidget(parent)
{
    QLayout *lo = new QVBoxLayout(this);
    QListWidget* mList = new QListWidget(this);

    mList->addItem("Testing");
    setLayout(lo);
    lo->addWidget(mList);
    lo->setSpacing(5);
}

main.cpp:

#include <QApplication>

#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    MainWindow w;
    w.resize(400, 500);
    w.show();

    return app.exec();
}

にレイアウトを設定しようとしたようですQMainWindowが、すでに組み込みのレイアウトがあります。これはsetCentralWidgetQWidgetQDialogサブクラスの手動レイアウト作成を残して、機能する必要がある場合にぴったりです。

上記のコードは正常に機能します。試して、必要な方法でリファクタリングしてください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ