6

いくつかのオブジェクトを表示するために使用されるメインウィジェットがあるとします。これらのオブジェクトの名前はQListWidgetに保存されます。ここで、ユーザーが1つのオブジェクト(QListWidgetの1つのアイテム)を選択したときに、オブジェクトの名前を引数として取る別のウィンドウで別のウィジェットを開きたいと思います。

class MainWidget
{
Q_OBJECT

public slots:
    void openSelection();

};

class ChildWidget
{
public:
    ChildWidget(QString name, QWidget* parent = nullptr);
};

void MainWidget::openSelection()
{
    QString selectedObjectName = ui->objectsNamesList->selectedItem()->text();
    ChildWidget* detaildedWiew = new ChildWidget(selectedObjectName, this);
    detaildedWiew->show();
}

これを行うと、子ウィジェットが開きますが、独自のスペースがありません。親の領域にロックされています。親とは関係なく、画面を自由に走り回るために、子供たちを解放する必要があります。これどうやってするの?Qtの方法はありますか、それとも「疑似子」関係を定義して、疑似子を適切に削除するシステムを開発する必要がありますか?

4

2 に答える 2

4

QWidget::setWindowFlags(Qt::Window)ウィジェットを別のウィンドウにするために使用できます。Qt::WindowFlagsもご覧ください。

于 2012-07-27T09:25:24.327 に答える
1

質問が正しかったかわかりません...

QWidgetのデフォルトのコンストラクターは、次の2つの引数を受け入れる場合があります。

  • QWidget *parent = 0新しいウィジェットの親です。0(デフォルト)の場合、新しいウィジェットはウィンドウになります。そうでない場合、それは親の子になり、親のジオメトリによって制約されます(Qt::Windowウィンドウフラグとして指定しない限り)。

  • Qt::WindowFlags f = 0(利用可能な場合)ウィンドウフラグを設定します。デフォルトはほとんどすべてのウィジェットに適していますが、たとえば、ウィンドウシステムフレームのないウィンドウを取得するには、特別なフラグを使用する必要があります。

したがって、に以外のものを渡した場合NULLparent2番目のパラメータを。として設定しない限り、ウィジェットは別のウィンドウにはなりませんQT::Window。これがあなたのために起こっていることです。したがって、フラグQT::Windowを設定するか、独自のクラスを作成してから派生させ、QWidget必要なポインタとなる追加の引数を取りながら、NULLとして取得するコンストラクタを作成する必要がありますparent

于 2012-07-27T09:24:38.060 に答える